web-dev-qa-db-ja.com

DDD、腐敗防止レイヤー、ハウツー?

現時点では、レガシーアプリケーションに基づいたアプリケーションを構築する必要があります。その古いアプリケーションのコードは破棄して書き直す必要がありますが、通常どおり、書き直すのではなく、新しいアプリケーションをベースにする必要があります。最近、DomainDrivenDesignパスを使用することにしました。つまり、腐敗防止レイヤーは私たちの問題の解決策になる可能性があります。私の知る限り、この方法で古いアプリケーションを徐々に書き直すことができるはずです。

しかし-良い例は見つかりません。 [〜#〜] any [〜#〜]情報をいただければ幸いです。

34
Arnis Lapsa

私の特定の実装では、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)
12
Troy Campano

FromtheDDD book(Domain-Driven Design:Tackling Complexity in the Heart of Software) by Eric Evans:

ANTICORRUPTION LAYERのパブリックインターフェイスは通常、一連のサービスとして表示されますが、エンティティの形式をとることもあります。

そして少し後で

ANTICORRUPTION LAYERの設計を整理する1つの方法は、FACADES、ADAPTERS(両方とも、Gamma etal。1995から)、およびトランスレータと、システム間で通信するために通常必要な通信および転送メカニズムを組み合わせることです。

したがって、提案された アダプタパターン および ファサードパターン を調べることで例を見つけることができます。

エリック・エバンスが言ったことを言い換えようと思います。あなたの腐敗防止レイヤーは、あなたのレイヤーの外側へのサービスとして表示されます。したがって、腐敗防止層の外側では、他の層は腐敗防止層と「話している」ことを認識しません。レイヤー内では、アダプターとファサードを使用してレガシー情報ソースをラップします。

腐敗防止層に関する詳細情報:

33
Davy Landman