Pregunta

Soy nuevo en DDD y NHibernate.

En mi proyecto actual, tengo una entidad persona, que contiene un objeto de valor, digamos de direcciones. Hoy en día, esto está muy bien. Pero tal vez un día voy a tener un requisito que mi valor del objeto (en este caso de direcciones), tendrán que convertirse en una entidad.

Antes de intentar modelar esto en un DDD vías, en un enfoque más centrado en los datos, que tenía una persona mesa, con una identificación, y otra tabla de direcciones, cuya PK era en realidad un FK, fue la identificación de un Persona (es decir, un uno-a-uno).

He estado leyendo que cuando Mapa un objeto de valor como un componente, su valor se consigue asignada como columnas en mi mesa Entidad (es así, no tendría el uno-a-uno).

Mi idea era que, cuando sea necesario, yo simplemente agregar una clave sustituta a mi mesa de direcciones, y luego se convierte en una entidad.

¿Cómo debo diseñar este usando NHibernate? Ya debería hacer mi dirección de objeto una Entidad?

Lo siento, ni siquiera sé si mis preguntas son claras, estoy realmente perdido aquí.

¿Fue útil?

Solución

En el sistema que estamos construyendo, damos importancia-objetos en tablas separadas. Por lo que yo sé, NHibernate requiere que una necesidad id agrega al objeto, pero ignoramos esto y tratar el objeto como un valor de objeto en el sistema. Como usted probablemente sabe, un valor a objetos es un objeto que no es necesario hacer un seguimiento, por lo que simplemente pasar por alto el id en el objeto. Esto nos hace más libres para modelar la base de datos de la manera que queremos y modelar el modelo de dominio de la manera que queremos.

Otros consejos

Puede combinar y hacer que sea un componente que permite a NHibernate mapa como un valor propio objeto en lugar de una entidad.

De esta manera no será necesario ningún propiedades virtuales ni una ctor protegida vacía (que puede ser privada).

Join("PROPOSAL_PRODUCT", product =>
{
    product.Schema(IsaSchema.PROPOSALOWN);
    product.KeyColumn("PROPOSAL_ID");

    product.Component(Reveal.Member<Proposal, Product>("_product"), proposalProduct =>
    {
        proposalProduct.Map...
    });
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top