2009-03-15 8 views
5

Veo en algunos modelos de objeto de dominio que se crea una clase base abstracta (que implementa Equals y GetHashCode) para todos los objetos de entidad de dominio heredar para obtener su identidad.Resumen Clase base para todos los objetos de entidad de dominio

No tengo claro por qué se necesita esta clase base y cuándo y por qué debería usarse. ¿Me puede dar una idea sobre esto o me puede canalizar un enlace que habla sobre esta

Gracias

Ahora entiendo las ventajas de anular la igualdad (este enlace ayudó http://en.csharp-online.net/CSharp_Canonical_Forms -Identity_Equality)

Volviendo al dominio diseño impulsado Me gustaría ampliar mi pregunta un poco;

Tengo una entidad de cliente que utilizo guid como identidad.

Si creo 2 instancias de clientes con exactamente los mismos detalles, dado que estoy usando guid como identidad, serán dos objetos diferentes. Pero como tienen todos los atributos iguales, deberían ser el mismo objeto (¿o es una mejor práctica de ddd mantenerlos únicos y separados?)

Tratando de entender si debo manejar la igualdad de dos objetos por completo coincidencia de valor de atributo. Si me dirijo hacia esa dirección, estoy considerando anular la Igualdad de la clase base en el nivel de la subclase e implementar estas condiciones o tener la identidad de la entidad como una cadena o un código hash (?) Representación de los valores de todos estos atributos y usan la Igualdad de la clase base.

Podría ser un poco lejos aquí, así que gracias de antemano por la paciencia.

+0

Sírvanse proporcionar detalles de lo que usted se refiere. No está viendo ninguna práctica en toda la industria que todos conozcan; ¡es más probable que vea algo específico de los detalles que no nos proporciona! –

+0

Espero que esto sea mejor, aunque no estaba claro dónde debería publicar una segunda pregunta como continuación de esta pregunta, así que la coloqué editando mi pregunta original. –

Respuesta

3

El uso del término igualdad está sobrecargado aquí:

1) Igualdad para Identidad

Si tiene 2 instancias del mismo cliente, ambas deben tener el mismo valor de GUID: es la única manera de asegurarse de trabajar con la misma entidad. En realidad, siempre habrá instancias diferentes de la misma entidad (por ejemplo, aplicaciones multiusuario que se ejecutan en diferentes máquinas).

2) Igualdad de identidad

Esto es donde se está comprobando que 2 casos tienen todos los mismos valores. Por ejemplo, si 2 miembros del personal miran al mismo cliente y la primera persona lo modifica &, ambas personas verán datos diferentes. Ambos están interesados ​​en el mismo cliente, pero los datos se vuelven obsoletos.

Para (2), definitivamente necesita un mecanismo para realizar la comprobación.Podría comparar cada propiedad (costosa) o podría usar una propiedad 'versión' para detectar cambios (consulte NHibernate’s optimistic locking mechanism).

Creo que su ejemplo es un poco artificial, y podría alejarlo de los aspectos más importantes de DDD. Si está interesado, I sell a tool que puede ayudar a captar los conceptos DDD más fácil.

0

Ha señalado dos de las razones por las que se utiliza.

Para Iguales, puede que no desee comprobar siempre si la referencia real es igual, porque puede que no lo sea. Es posible que desee utilizar algún tipo de propiedad de identificación (como ID pública int) para comprobar si 2 entidades son iguales. La implementación básica de Equals solo va a verificar si las 2 referencias son iguales.

En cuanto a código hash es una manera de identificar de manera única un objeto/tipo dado cuando se utiliza en algoritmos hash etc.

0

Tendría igual verificación de identidad, porque le permite tener una instancia de una entidad que contiene una situación de antes y después, que a veces puede ser muy útil. Para comprobar si una instancia ha cambiado, una bandera sucia puede hacer el truco.

HTH, Jonathan

1

Si usted está siguiendo DDD, creo que usted debe comprobar en la igualdad de los objetos por su ID (Identidad). Esto se debe a que las entidades de dominio se definen principalmente y son rastreadas por su identidad y no por atributos. Entonces, no importa qué tan similares sean con otros objetos, todavía son entidades diferidas.

Otro concepto que desearía verificar es un objeto de valor. Es algo que describe las características de un objeto y no requiere una identidad. Ejemplo sería, dirección, dinero, color.

1

Debe comparar los ID de los objetos si son entidades y sus atributos en caso de que sean objetos de valor. Eso significa que no tiene que heredar sus objetos de valor de una entidad base, pero para las entidades es mejor crear una.

¿Cómo entender si una clase es una entidad o un objeto de valor? Debería responder una pregunta: ¿son iguales los objetos de dicha clase si tienen el mismo conjunto de atributos? Si es así, son objetos de valores. Por ejemplo, dos personas no son iguales, incluso si tienen los mismos nombres y fechas de nacimiento; de todos modos, debe tratarlas como entidades diferentes. Pero si tiene una moneda de 25 centavos, probablemente no le importe qué pieza de metal exacta tiene, todas tienen solo monedas de 25 centavos.

Hay un gran artículo que describe los detalles: domain object base class

Cuestiones relacionadas