DDD,Anti Corruption层,操作方法?

时间:2009-05-26 06:56:48

标签: architecture domain-driven-design rewrite legacy

目前,我们必须构建一个基于遗留应用程序的应用程序。旧应用程序的代码应该被丢弃并重写,但通常情况下 - 而不是重写它,我们需要在它上面添加新内容。最近,我们决定采用DomainDrivenDesign路径。所以 - 反腐败层可以解决我们的问题。据我所知,这种方式应该可以逐步重写旧的应用程序。

但是 - 我找不到任何好的例子。我希望任何信息。

2 个答案:

答案 0 :(得分:31)

来自Eric Evans的 DDD book (Domain-Driven Design: Tackling Complexity in the Heart of Software)

  

的公共接口   通常出现抗癫痫层   尽管如此,作为一套服务   偶尔它可以采取的形式   一个ENTITY。

稍后

  

组织设计的一种方式   抗癫痫层是一个   FACADES,ADAPTERS的组合(两者都有   来自Gamma等人。 1995),和   译者,以及   沟通和运输机制   通常需要谈谈   系统

因此,您可以通过查看建议的adapter patternfacade 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)