web-dev-qa-db-ja.com

ドメインオブジェクト/サービスおよびビジネスロジック層

ソフトウェアアーキテクチャのドメインオブジェクトおよびドメインサービスとは何ですか?私はそれらに精通していない、またはそれらがビジネスロジック層とどのように異なるのか?

39
aces.

人によってこれらの用語は多少異なる方法で使用されますが、ここに私の見解を示します。

1)「ビジネス」と「ドメイン」はほぼ同義語です。 「ドメイン」は、ビジネスアプリケーションを作成していると仮定しないという点で、もう少し一般的です。そのため、科学アプリやゲームを書いている場合、コードの関連部分を「ビジネス」コードではなく「ドメイン」コードと呼ぶことをお勧めします。そのため、この説明の残りの部分では、より一般的な「ドメイン」を使用します。

2)「ドメインロジック」には、「ドメインオブジェクト」と「ドメインサービス」の両方が含まれます。さまざまな理由(技術的およびその他)のために、多くのアーキテクチャでは、ドメインロジックがデータを格納するオブジェクト(「ドメインオブジェクト」)とそれらを操作するオブジェクト(「ドメインサービス」)に分割される設計が採用されています。 Martin Fowlerなどは、それはあまりオブジェクト指向ではないことを指摘しました OOコンセプトの大部分は機能をデータと結びつけることであり、それは正しいことです。です。ドメインオブジェクトはデータであり、ドメインサービスはデータを処理する部分です。

3)ドメイン駆動型設計では、真のOO設計に戻ることを考えているため、さまざまなサービスメソッドがドメインオブジェクトに戻り、OO時々「貧血」オブジェクトと呼ばれるものではなく、感覚。 DDDでは、ドメインオブジェクト自体がより堅牢であるため、ドメインロジックを形成します。実際にはまだいくつかのドメインサービスも存在する可能性がありますが、これは通常、従来のドメインオブジェクトとサービスモデルよりもDDDの方が小さくなります。

80
Willie Wheeler

ビジネスロジック層は、ドメイン層とも呼ばれます。これは、すべてのビジネスロジックを処理するレイヤー/層です。

ドメインオブジェクトとドメインサービスは、ドメインレイヤーの構築に使用するクラスです。

3

違いを把握できるようにするには、アプリケーション層とドメイン(ビジネス)層の責任を理解する必要があります。ドメイン層は、ビジネスオブジェクト、主にビジネスからのエンティティ(ある程度抽象化されている場合もあります)、およびドメインサービスを表しています。ドメインレイヤーは、ビジネスが変更されるか、ビジネス内でドメインのコンテキストが変更された場合にのみ変更されます。アプリケーション層はドメイン層の上に「存続」し、コントローラ部分がアプリケーション層でHTML部分がプレゼンテーション層であるasp.net MVC Webアプリケーションのように、多くの場合(できれば)ドメイン層から分離されます。アプリケーション層は、その特定のアプリケーション(またはサービス、API、アプリなど)の目的に合わせて変更されます

1

ドメイン層とビジネス層の両方にビジネスロジックが含まれているが異なる理由を説明するために、私が使用したエンタープライズアプリケーションシナリオのこの例を提供しましょう。

OMG CMMN実装など、純粋なケース管理エンジンであるCOTS製品があるとします。データ層の一連のエンティティと連携するビジネス層のビジネスロジックの全体。

ここで、システムインテグレーターである2人の顧客がいると仮定し続けます。1人は法的ケース管理システムを構築し、もう1人はヘルスケアケース管理を希望しています。両方ともケース管理ですが、独自のドメイン用語、オブジェクト、手順、業界アーキテクチャなどがあります。

それぞれが独自のドメイン層を追加するため、それぞれのビジネスドメインの用語と概念で機能できます。

そのため、ビジネスロジックが含まれていますが、ドメイン層は一般的な再利用可能なビジネスを特定のビジネスにカプセル化する方法です。

アプリケーションが「単純」であるほど、ドメインモデルとデータモデル、およびビジネスロジックとドメインロジックが類似します。しかし、コンポーネントの「効用」を分散させると、最終的に懸念事項は分離されます。

0
Chris