1. ホーム
  2. design-patterns

[解決済み] なぜドメインエンティティをプレゼンテーション層から分離する必要があるのですか?

2023-05-12 22:23:02

質問

ドメイン駆動設計の1つの部分は、あまり詳細がないように見えますが、どのように、そしてなぜドメインモデルをインターフェースから分離すべきかということです。私は、これが良い習慣であると同僚を説得しようとしていますが、あまりうまくいっていないようです...。

彼らはプレゼンテーション層とインターフェイス層の好きなところでドメインエンティティを使用しています。私が彼らに、ドメイン層をインターフェイス層から分離するためにディスプレイモデルまたはDTOを使用すべきだと主張すると、彼らはそのようなことをすることにビジネス価値を見いだせないと反論します。

そこで、私はこれを裏付けるために使用できるいくつかの具体的な理由を探しています。具体的には

  1. なぜプレゼンテーション層でドメインオブジェクトを使用しない方がよいのでしょうか?

      (答えが明白な「デカップリング」である場合、この文脈でなぜこれが重要なのかを説明してください)
    1. インターフェイスからドメインオブジェクトを分離するために、追加のオブジェクトまたはコンストラクトを使用する必要がありますか?

    どのように解決するのですか?

    端的に言えば、理由は実装とドリフトの 1 つです。 はい、プレゼンテーション層は、ビジネス オブジェクトを適切に表現できるようにするために、ビジネス オブジェクトについて知る必要があります。 そうです、当初は 2 種類のオブジェクトの実装の間に多くの重複があるように見えます。 問題は、時間が経つにつれて、双方に追加されるものが出てくることです。 プレゼンテーションが変化し、プレゼンテーション層のニーズが進化して、ビジネス層とは完全に独立したもの(例えば、色など)が含まれるようになります。 一方、ドメインオブジェクトは時間とともに変化し、インターフェイスから適切なデカップリングを行わないと、ビジネスオブジェクトに一見良さそうに見える変更を行うことによって、インターフェイス層を台無しにする危険性があります。

    つまり、ビジネス オブジェクト レイヤーは、それと通信できる唯一の方法であるインターフェースを公開し、インターフェースに関する実装の詳細 (すなわちドメイン オブジェクト) は公開されません。 つまり、インターフェイス層とBO層の2カ所でドメインオブジェクトを実装しなければなりません。 しかし、この再実装は、最初は余分な作業のように見えるかもしれませんが、将来のある時点で膨大な作業を節約するデカップリングを強化するのに役立ちます。