2009-07-02 10 views
6

私はhttp://en.wikipedia.org/wiki/Domain-driven_designを今読んでいます。私は「価値オブジェクト」と「サービス」がDDD。ドメインドリブンデザインの初心者、「価値オブジェクト」と「サービス」を簡単に説明してください

  • 値オブジェクト:物の特性を記述するオブジェクト。値オブジェクトには概念的なアイデンティティーはありません。これらは通常読み取り専用のオブジェクトで、Flyweightのデザインパターンを使用して共有できます。

  • サービス:操作が概念的にどのオブジェクトにも属していない場合。問題の自然な輪郭に続いて、これらの操作をサービスで実装することができます。 GRASPのサービスコンセプトは「純粋な製造」と呼ばれています。

値objexts:誰かが私にこの簡単な例を教えてもらえますか?

サービス:オブジェクト/エンティティではなく、リポジトリ/ファクトリに属していない場合、サービスですか?私はこれを理解していない。

答えて

7

値オブジェクトの典型的な例はMoneyです。国際的な電子商取引アプリケーションを構築する場合、「金銭」という概念をクラスにカプセル化したいと考えています。これにより、基本的な加算、減算などの金額だけでなく、ユーロなどの通貨換算も行うことができます。

このようなMoneyオブジェクトには固有のIDはありません。これには値を格納します。その値を破棄すると、それはなくなります。さらに、10ドルを含む2つのMoneyオブジェクトは、別個のオブジェクトインスタンスであっても同一とみなされます。

値オブジェクトのその他の例は、長さなどの測定値で、値と単位(9.87 kmまたは3フィートなど)を含む場合があります。この場合も、データを単純に格納するだけでなく、他の測定などに変換メソッドを提供する可能性があります。

サービスは、重要なドメイン操作を実行するタイプですが、他のより名詞に基づくドメインの概念にはあまり適していません。できるだけサービスを少なくするよう努めなければなりませんが、サービスは重要なドメイン概念をカプセル化する最良の方法です。

バリューオブジェクト、サービスなどについては、Domain-Driven Designという優れた本で詳しく読むことができますが、これはお勧めできません。

3

値オブジェクト:典型的な例はアドレスです。平等は、アイデンティティではなく、オブジェクトの値に基づいており、したがって名前に基づいています。つまり、たとえAddressオブジェクトがメモリ内の2つの全く異なるオブジェクトであったり、データベース内に異なる主キーを持っていても、2つのPersonオブジェクトは同じAddressオブジェクトの値を持つ場合、同じアドレスを持ちます。

サービス:必ずしも特定のドメインオブジェクトに属しているわけではなく、ドメインオブジェクトに作用するアクションを提供します。たとえば、製品の価格が一定の価格を下回ったときに電子メール通知をオンラインショップで送信するサービスを考えています。エンティティ対値オブジェクトを識別する方法のhttp://www.infoq.com/minibooks/domain-driven-design-quickly

関連する問題