2009-05-26 118 views
27

目前,我们必须建立一个基于传统应用程序的应用程序。旧应用程序的代码应该被丢弃并重写,但是正如它通常所做的那样 - 我们不需要重写它,而需要在其上添加新的东西。最近,我们决定进入DomainDrivenDesign路径。所以 - 反腐败层可能是我们问题的解决方案。据我所知,这种方式应该有可能逐渐重写旧的应用程序。DDD,反腐败层,怎么做?

但是 - 我找不到任何好的例子。我将不胜感激ANY信息。

回答

9

在我的特定实现,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) 
27

DDD book (Domain-Driven Design: Tackling Complexity in the Heart of Software)由Eric埃文斯:

的 防腐层的公共接口通常出现 为一组服务,虽然偶尔 它可以采取的 的实体的形式。

和位后组织的 设计防腐层是作为FACADES,适配器(均 从Gamma等人。1995年)的 组合

一种方法,和 翻译,以及 通信和传输机制 通常需要在 系统之间通话。

因此,您可以通过查看建议的adapter patternfacade pattern找到示例。

我会尝试解释埃里克埃文斯所说的话,你的反腐败层会作为服务出现在你的图层之外。因此,在反腐败层之外,其他层不会知道他们正在与反腐败层“说话”。在图层内部,您可以使用适配器和外墙来包装旧信息源。关于反腐败层

的更多信息:

+0

谢谢。我现在会检查那些。但我已经有一种感觉,这是不够的。没有任何代码示例? :) – 2009-05-26 07:07:40

+0

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_wrapper402122006091959AM/csharp_wrapper4.aspx这一个很好理解适配器模式:) – 2009-05-26 07:25:56