DDD, Anti Corruption layer, how-to?
W tej chwili musimy zbudować aplikację, która jest oparta na starszej. Kod dla tej starej aplikacji należy wyrzucić i przepisać na nowo, ale jak to zwykle bywa - zamiast przepisywać, musimy na niej oprzeć coś nowego. Ostatnio zdecydowaliśmy się przejść ścieżką DomainDrivenDesign. Warstwa antykorupcyjna może być rozwiązaniem naszych problemów. O ile rozumiem, w ten sposób powinno być możliwe stopniowe przepisywanie starej aplikacji.
Ale -- nie mogę znaleźć dobry przykład. Byłbym wdzięczny za wszelkie informacje.
2 answers
W mojej konkretnej implementacji EmployeeAccessService jest wywoływana przez repozytorium. To naprawdę fasada w warstwie antykorupcyjnej. Jest ona przeznaczona dla pracowników. Adapter pobiera obiekt z modelu starszego (który pobiera z EmployeeAccessFacade),a następnie przekazuje go do Employeaccesstranslator, aby przekształcić obiekt z modelu starszego do obiektu domain w mojej aplikacji model.
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 20:38:54
From the Domain-Driven Design: Tackling Complexity in the Heart of Software) autor: Eric Evans:
Publiczny interfejs Warstwa antykorupcyjna pojawia się zwykle jako zestaw usług, chociaż czasami może przybrać formę byt.
I trochę później
Jeden ze sposobów organizacji projektowania warstwa antykorupcyjna jest jak połączenie fasad, adapterów (zarówno od Gamma et al. 1995), oraz Tłumacze, wraz z mechanizmy komunikacji i transportu zwykle potrzebne do rozmowy między systemy.
Możesz więc znaleźć przykłady patrząc na sugerowany wzór adaptera i wzór elewacji .
Postaram się sparafrazować to, co powiedział Eric Evans, twoja warstwa antykorupcyjna pojawi się jako usługi na zewnątrz Twojej warstwy. Więc poza warstwą antykorupcyjną inne warstwy nie będą wiedzieć, że "mówią" z antykorupcyjną warstwa. Wewnątrz warstwy można użyć adapterów i fasad, aby owinąć swoje starsze źródła informacji.
Więcej informacji o warstwie antykorupcyjnej:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 14:31:49