Come dovrei includere modelli di terze parti nel mio modello di dominio?

5

Attualmente sto provando a progettare una piccola applicazione utilizzando Domain Driven Design, ma temo di non aver ancora capito il concetto. Lascia che provi a spiegarlo nel modo più chiaro possibile.

public interface IMyDomainRepository
{
    void Add(IAnInterfaceFromAThirdParty element);
}

L'interfaccia sopra è definita nel mio modello di dominio e sarà utilizzata in un progetto diverso chiamato ThirdPartyImplementionVersionX .

Ora IAnInterfaceFromAThirdParty non è definita nel mio modello di dominio ma proviene dalla mia libreria di terze parti.

Potrei creare una classe / interfaccia nel mio modello di dominio che implementa le stesse proprietà e metodi dell'interfaccia IAnInterfaceFromAThirdParty ma questa interfaccia ha 20 metodi definiti rendendo così un compito difficile implementare la stessa logica.

È questa la strada da percorrere o mi manca qualcosa?

    
posta thomasvdb 05.02.2012 - 13:48
fonte

2 risposte

6

Un componente di terze parti ha il proprio modello espresso nella propria lingua. Inoltre, in genere il componente di terze parti risolve un problema generico che normalmente è una porzione del problema più specifico del contesto che stai cercando di risolvere.

La prima cosa da fare è essere consapevoli del fatto che il tuo modello e quello di terze parti sono diversi e formano due distinti contesti limitati . Una volta chiarito ciò, potresti scegliere la strategia che desideri applicare quando si ha a che fare con il componente di terze parti:

  • Proteggi il tuo modello con un strato anti-corruzione mantenendo così il tuo modello fisicamente separato dalla terza parte, mettendo al centro una struttura simile ad una scheda. Ciò consente una modellazione sofisticata nel tuo dominio senza compromettere il modello esterno.
  • Aderire al modello esterno (il modello qui è noto come conformista ): non una modellazione tanto sofisticata, ma potrebbe essere ancora una decisione consapevole, in porzioni non core del sistema.

Non provare a fare entrambe le cose: se stai cercando una modellazione sofisticata, devi proteggere i confini del tuo dominio, senza perdite da domini esterni. In altre parole, lo strato anti-corruzione tende ad essere la scelta preferita.

Nell'esempio che stai portando, questo probabilmente finirà per definire le interfacce in termini di lingua del tuo dominio e fare affidamento sulle funzionalità fornite dal componente di terze parti solo a livello di implementazione.

    
risposta data 07.02.2012 - 12:17
fonte
1

Quando lavoro con modelli di terze parti, di solito creo un adattatore e i miei modelli. L'adattatore dovrebbe mappare gli oggetti dalla terza parte ai miei modelli.

Il problema dietro è che un assemblie di terze parti o qualcosa del genere potrebbe sempre cambiare. Cosa stai facendo quando passi da a a b?!? Modifica di tutte le linee in cui è stato implementato il modello dal prodotto di terze parti?

    
risposta data 07.02.2012 - 13:02
fonte

Leggi altre domande sui tag