2009-05-26 14 views
27

Al momento, dobbiamo creare un'applicazione basata su uno esistente. Il codice per quella vecchia applicazione dovrebbe essere gettato via e riscritto, ma come di solito accade - invece di riscriverlo, dobbiamo basarci su qualcosa di nuovo. Recentemente, abbiamo deciso di seguire il percorso DomainDrivenDesign. Quindi - il livello anti-corruzione potrebbe essere una soluzione per i nostri problemi. Per quanto ho capito, in questo modo dovrebbe essere possibile riscrivere gradualmente la vecchia applicazione.DDD, strato anti-corruzione, istruzioni?

Ma - Non riesco a trovare alcun buon esempio. Gradirei informazioni ANY.

risposta

9

Nel mio particolare implementazione, EmployeeAccessService viene chiamato da un repository. È davvero una facciata nel livello Anti-corruzione. Delega a EmployeeAccessAdapter. L'adattatore recupera un oggetto dal modello legacy (che ottiene da EmployeeAccessFacade), quindi lo passa a EmployeeAccessTranslator per trasformare l'oggetto dal modello legacy all'oggetto dominio nel modello dell'applicazione.

EmployeeAccessService

public Employee findEmployee(String empID){ 
    return adapter.findEmployee(empID); 
} 

EmployeeAccessAdapter

public Employee findEmployee(String empID){ 
    EmployeeAccessContainer container = facade.findEmployeeAccess(empID); 
    return translator.translate(container); 
} 

EmployeeAccessTranslator

public Employee translate(EmployeeAccessContainer container){ 
    Employee emp = null; 
    if (container != null) { 
     employee = new Employee(); 
     employee.setEmpID(idPrefix + container.getEmployeeDTO().getEmpID()); 
     ...(more complex mappings) 
+0

Questo sembra buono. Ma non ho ancora visto alcun codice. :) –

27

Da ilDDD book (Domain-Driven Design: Tackling Complexity in the Heart of Software) da Eric Evans:

L'interfaccia pubblica della STRATO Anticorruzione di solito appare come un insieme di servizi, anche se occasionalmente può assumere la forma di un'entità.

e un po 'più tardi

Un modo di organizzare la progettazione del LAYER la corruzione è come un combinazione di facciate, adattatori (sia di Gamma et al. 1995), e traduttori , insieme ai meccanismi di comunicazione e trasporto di solito necessario per parlare tra i sistemi .

Quindi, si possono trovare esempi osservando il suggerito adapter pattern e facade pattern.

Proverò a parafrasare ciò che ha detto Eric Evans, il livello anti-corruzione apparirà come servizi all'esterno del tuo livello. Quindi, al di fuori del livello anti-corruzione, gli altri livelli non sapranno che stanno "parlando" con uno strato anti-corruzione. All'interno del livello utilizzerai adattatori e facciate per avvolgere le tue fonti di informazione legacy.

Maggiori informazioni sullo strato di anti-corruzione:

+0

Grazie. Controllerò quelli adesso. Ma ho già la sensazione che non sarà abbastanza. Non ci sono esempi di codice? :) –

+0

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_wrapper402122006091959AM/csharp_wrapper4.aspx questo è ottimo per comprendere il modello dell'adattatore :) –

+1

Collegamenti Creazione dello spesso strato anti-corruzione necessario (http: // joeydotnet.com/blog/archive/2007/09/10/building-the-often-needed-anti-corruption-layer.aspx) e DDD - Livello anti corruzione (http://www.goeleven.com/blog/ entryDetail.aspx? entry = 168) sono interrotti –