DDD, слой Anti Corruption, руководство пользователя?
На данный момент нам нужно создать приложение, основанное на устаревшем. Код для этого старого приложения должен быть выброшен и переписан, но, как обычно, вместо того, чтобы переписывать его, нам нужно опираться на что-то новое. Недавно мы решили перейти по пути DomainDrivenDesign. Таким образом, уровень защиты от коррупции может быть решением наших проблем. Насколько я понимаю, таким образом можно было бы постепенно переписать старую заявку.
Но - я не могу найти хороший пример. Я был бы признателен за ЛЮБОЕ информацию.
Ответы
Ответ 1
В моей конкретной реализации EmployeeAccessService вызывается репозиторием. Это действительно фасад в слой борьбы с коррупцией. Он делегирует EmployeeAccessAdapter. Адаптер извлекает объект из унаследованной модели (который он получает из EmployeeAccessFacade), затем передает его в EmployeeAccessTranslator для преобразования объекта из старой модели в объект домена в моей модели приложения.
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)
Ответ 2
Из DDD-книга (проект, управляемый доменами: проблема сложности в сердце программного обеспечения) Эрика Эванса
Открытый интерфейс Обычно появляется АНТИКОРРУПЦИОННЫЙ СЛОЙ как набор УСЛУГ, хотя иногда он может принимать форму ENTITY.
и чуть позже
Один из способов организации дизайна АНТИКОРРУПЦИОННЫЙ СЛОЙ - это сочетание FACADES, ADAPTERS (оба от Gamma et al. 1995) и переводчиков, а также коммуникационные и транспортные механизмы обычно необходимо разговаривать между системы.
Итак, вы можете найти примеры, посмотрев предложенный шаблон адаптера и фасад.
Я попытаюсь перефразировать то, что сказал Эрик Эванс, ваш слой с антикоррупцией будет отображаться как служба снаружи вашего слоя. Таким образом, вне слоя антикоррупции другие слои не будут знать, что они "говорят" с антикоррупционным слоем. Внутри слоя вы должны использовать адаптеры и фасады, чтобы обернуть ваши устаревшие источники информации.
Дополнительная информация о слое антикоррупции: