Pregunta

Estoy intentando asignar clases de usuario y perfil, así como el siguiente:

public class User
{
    public long ID { get; set; }
    public string LoginName { get; set; }
    public Profile Profile { get; set; }
}

public class Profile
{
    //the ID is the same with User's ID 
    public long ID { get; protected set; }
    public string NickName { get; set; }
    public Gender Gender { get; set; }
}

Por lo tanto, se puede asignar ya que tanto uno-a-uno y la relación componenet. Y me encuentro con algunas personas valoran el componente y piensan uno-a-uno es una mala práctica, ¿por qué? Por motivos de rendimiento? Pero están diseñados como dos mesas separadas en muchos escenarios (ASP.NET2.0 membresía, por ejemplo).

¿Cómo debería elegir? ¿Qué aspectos debo tener en cuenta? Sé medios componente "valor de objeto", pero no un enitity, pero ¿Quiere esto decir algunas cosas nuevas?

PS: Y lo que me confunde más es la opinión de que los muchos-a-uno debe usarse incluso que es la relación de uno-a-uno en el mundo real

!
¿Fue útil?

Solución

Se debe utilizar ninguno de ellos.

One-To-One

Usted tiene el usuario y el perfil en diferentes tablas de la base, pero ambos comparten una PK mutuamente excluyentes: Ver http://jagregory.com/writings / i-creo-que-media-a-muchos-a-uno-señor /

El diseño bastante mala práctica para bases de datos relacionales, es desordenado y no necesariamente cumplir las limitaciones de la relación.

Componente

Se puede utilizar el componente para obtener una limpieza a objetos Modelo de un desordenado de datos de bases de datos, perfiles de usuario y relacionales son a la vez almacenada en la misma tabla de base de datos, sino que debe ser separado de su modelo de objetos (como usted lo quiere, a juzgar por su código). Lazy carga probablemente no es compatible, lo que hará que el tráfico de alta base de datos.

referencia

En mi humilde opinión, se debe utilizar una referencia. Es un poco como conceptual de uno a uno, sino a referencias usuario un perfil. Los perfiles pueden ser almacenados en su propia mesa, se pueden cargar con pereza (rendimiento) y no dependen de un usuario.

En cuanto a su confusión: Basta con leer el enlace que he suministrado. Técnicamente, se necesita un muchos a uno para una base de datos estructuras debidamente diseñado, ya que es lo que es técnicamente posible y se va a proyectar. Sé que es confuso. Si sólo tiene que asignar un lado, pensar en una referencia en lugar de uno-a-uno.

Otros consejos

La clave debe estar en casos de uso para esta clase. No tome ASP.NET membresía como un ejemplo, ya que su diseño es terrible.

Es necesario responder a estas preguntas:

  1. ¿Tiene un sentido Perfil maquillaje como una entidad propia?
  2. ¿Tiene referencias al perfil en otro sitio en su dominio?
  3. ¿Se puede tener un usuario sin un perfil?
  4. ¿Tiene un comportamiento de su propio?
  5. ¿Quieres que extender (heredar) Perfil por alguna razón?
  6. la mayoría de los casos de uso solo se ocupan del usuario (y su LoginName, no sólo el ID), pero no el perfil?

Si la mayoría de las preguntas son verdaderas, usted tiene un caso bueno para el uso de uno-a-uno (no estoy de acuerdo con @Falcon, lo que es en realidad uno de los usos legítimos de uno-a-uno)

De lo contrario, un componente no tendrán ningún problema. No tiene una identificación, para que pueda quitar esa propiedad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top