目前,我们必须构建一个基于遗留应用程序的应用程序。旧应用程序的代码应该被丢弃并重写,但通常情况下 - 而不是重写它,我们需要在它上面添加新内容。最近,我们决定采用DomainDrivenDesign路径。所以 - 反腐败层可以解决我们的问题。据我所知,这种方式应该可以逐步重写旧的应用程序。
但是 - 我找不到任何好的例子。我希望任何信息。
答案 0 :(得分:31)
来自Eric Evans的 DDD book (Domain-Driven Design: Tackling Complexity in the Heart of Software):
的公共接口 通常出现抗癫痫层 尽管如此,作为一套服务 偶尔它可以采取的形式 一个ENTITY。
稍后
组织设计的一种方式 抗癫痫层是一个 FACADES,ADAPTERS的组合(两者都有 来自Gamma等人。 1995),和 译者,以及 沟通和运输机制 通常需要谈谈 系统
因此,您可以通过查看建议的adapter pattern和facade pattern找到示例。
我将尝试解释Eric Evans所说的内容,您的反腐败图层将作为服务提供给您的图层外部。因此,在反腐败层之外,其他层不会知道他们正在与反腐败层“说话”。在图层内部,您将使用适配器和外墙来包装旧的信息源。
有关反腐败层的更多信息:
答案 1 :(得分:11)
在我的特定实现中,EmployeeAccessService由Repository调用。它实际上是反腐败层面的一个外观。它委托给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)