Domanda

Sono nuovo di DDD e NHibernate.

Nel mio progetto attuale, ho un soggetto persona, che contiene un oggetto di valore, diciamo Indirizzo. Oggi, questo va bene. Ma forse un giorno avrò un requisito che il mio oggetto di valore (in questo caso Address), dovranno diventare un soggetto.

Prima di provare a modellare questo su un DDD-way, in un approccio più data-centric, ho avuto una persona tavolo, con un ID, e un altro tavolo Indirizzo, il cui PK era in realtà un FK, è stato l'ID di un persona (vale a dire, un uno-a-uno).

Ho letto che quando traccio un oggetto valore come un componente, il suo valore sarà ottenere mappato come colonne di mia tabella di entità (così, non avrei l'uno-a-uno).

La mia idea era che, quando necessario, vorrei semplicemente aggiungere una chiave surrogata al mio tavolo Indirizzo, e allora diventa un'Entità.

Come dovrei progettare questo usando NHibernate? Dovrei già fare il mio indirizzo oggetto un'entità?

Mi dispiace, non so nemmeno se le mie domande sono chiare, sono davvero perso qui.

È stato utile?

Soluzione

Nel sistema che stiamo costruendo, abbiamo messo a valore oggetti in tabelle separate. Per quanto ne so, NHibernate richiede che un must id aggiunto all'oggetto, ma ignorare questo e trattare l'oggetto come un valore-oggetto nel sistema. Come probabilmente sapete, un valore-Object è un oggetto che non è necessario per tenere traccia, quindi abbiamo semplicemente si affacciano sul id nell'oggetto. Questo ci rende più liberi di modellare il database il modo in cui vogliamo e modellare il modello di dominio il modo in cui vogliamo.

Altri suggerimenti

È possibile Partecipa e ne fanno un componente che permette NHibernate per mappare come un oggetto di valore corretto invece di un'entità.

In questo modo non sarà necessario alcun proprietà virtuali né un ctor protetta vuota (può essere privato).

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

    product.Component(Reveal.Member<Proposal, Product>("_product"), proposalProduct =>
    {
        proposalProduct.Map...
    });
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top