DDD,反腐败层,如何做?
-
05-09-2019 - |
题
目前,我们必须构建一个基于遗留应用程序的应用程序。旧应用程序的代码应该被丢弃并重写,但正如通常情况一样,我们需要在其基础上创建新的东西,而不是重写它。最近,我们决定走领域驱动设计之路。因此,反腐败层可以解决我们的问题。据我了解,这样应该可以逐步重写旧的应用程序。
但是——我找不到任何好的例子。我将不胜感激 任何 信息。
解决方案
在我的特定实现中,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)
其他提示
从 这 DDD 书籍(领域驱动设计:解决软件核心的复杂性) 作者:埃里克·埃文斯:
反腐败层的公共接口通常是作为一组服务出现的,尽管偶尔会采取实体的形式。
稍后
组织反爆发层设计的一种方法是将立面和适配器的组合(均来自Gamma等。1995年)和翻译人员,以及系统之间通常需要进行的沟通和运输机制。
因此,您可以通过查看建议来找到示例 适配器模式 和 立面图案.
我将尝试解释埃里克·埃文斯(Eric Evans)所说的话,您的反腐败层将作为服务出现在您的层外部。因此,在反腐败层之外,其他层将不知道他们正在与反腐败层“交谈”。在该层内部,您将使用适配器和外观来包装遗留信息源。
有关反腐败层的更多信息:
不隶属于 StackOverflow