41 Stimmen

DDD, Anti-Korruptions-Schicht, how-to?

Im Moment müssen wir eine Anwendung erstellen, die auf einer älteren Anwendung basiert. Der Code für diese alte Anwendung sollte weggeworfen und neu geschrieben werden, aber wie es so üblich ist - anstatt ihn neu zu schreiben, müssen wir etwas Neues auf ihm aufbauen. Vor kurzem haben wir beschlossen, den Weg des DomainDrivenDesigns zu gehen. Die Anti-Korruptionsschicht könnte also eine Lösung für unsere Probleme sein. Soweit ich das verstehe, sollte es auf diese Weise möglich sein, die alte Anwendung schrittweise neu zu schreiben.

Aber - ich kann kein gutes Beispiel finden. Ich würde es schätzen ANY Informationen.

40voto

Davy Landman Punkte 14631

De die DDD-Buch (Domain-Driven Design: Tackling Complexity in the Heart of Software) von Eric Evans:

Die öffentliche Schnittstelle des ANTICORRUPTION LAYER erscheint normalerweise als eine Reihe von SERVICES, obwohl gelegentlich kann sie die Form einer einer ENTITÄT.

und ein wenig später

Eine Möglichkeit, die Gestaltung von der ANTICORRUPTION LAYER als eine Kombination von FACADES, ADAPTERS (beide aus Gamma et al. 1995), und Übersetzern, zusammen mit der Kommunikations- und Transportmechanismen die normalerweise für die Kommunikation zwischen Systemen.

Sie können also Beispiele finden, indem Sie sich die vorgeschlagenen Adapterschema y Fassadenmuster .

Ich werde versuchen, die Worte von Eric Evans zu paraphrasieren: Ihre Anti-Korruptions-Schicht wird als Dienstleistung außerhalb Ihrer Schicht erscheinen. Außerhalb der Anti-Korruptionsschicht wissen die anderen Schichten also nicht, dass sie mit einer Anti-Korruptionsschicht "sprechen". Innerhalb der Schicht würden Sie Adapter und Fassaden verwenden, um Ihre Legacy-Informationsquellen zu umhüllen.

Weitere Informationen über die Anti-Korruptions-Ebene:

20voto

Troy Campano Punkte 196

In meiner speziellen Implementierung wird der EmployeeAccessService von einem Repository aufgerufen. Es ist eigentlich eine Fassade für die Anti-Korruptionsschicht. Er delegiert an den EmployeeAccessAdapter. Der Adapter holt ein Objekt aus dem Legacy-Modell (das er von EmployeeAccessFacade erhält) und übergibt es dann an den EmployeeAccessTranslator, um das Objekt aus dem Legacy-Modell in das Domänenobjekt im Modell meiner Anwendung zu transformieren.

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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X