Domain Services
エンティティの一部ではない機能があるため、ドメイン モデルがある場合は必要です。
たとえば aRepository
または aについて考えてみましょうFactory
。a のインターフェースRepository
はおそらくあなたのものですDomain Layer
が、実装はあなたのものInfrastructure Layer
です。を使用するFactory
と、実装とインターフェイスの両方がDomain Layer
.
これらのドメイン サービスは、アプリケーション層から使用されます。アプリケーション層の目標は、ドメイン モデルが機能できるようにすべてが整っていることを確認することです。これは、リポジトリから特定のエンティティをロードし、それらに対してドメイン固有の関数を呼び出すことを意味する場合があります。
検証はエンティティ内で行う必要があります。たとえば、Money
クラスがあるとします。
public class Money
{
public Money(string currency, int amount)
{
Currency = currency;
Amount = amount;
}
public int Amount { get; set; }
public string Currency { get; set; }
}
クラスが負の金額を持つことを許可されていない場合、Money
これをどこで検証しますか?
これを行うのに最適な場所はクラス内です。エンティティは、それ自体の状態に責任があります。クラスではMoney
、これは簡単に確認できますが、たとえば、マージする必要がある重複アイテムがあるかどうかをチェックする責任があるOrder
クラスでOrderLines
は(送料を節約できます!)Order
OrderLine