ドメイン駆動設計を使用してアプリケーションを開発しています。私が使用しているパターンの1つは、リポジトリパターンです。簡単にするために、次のクラスとインターフェイスがあるとしましょう。
Car-車のドメインの概念を表すドメインクラス。
public class Car {
public int Id {get;private set;}
public string SomeUniqueCode {get;private set;}
}
ICarRepository-Carオブジェクトへの変更を追加、削除、または保存するためのインターフェース。
public interface ICarRepository{
Car AddCar(Car c);
void DeleteCar(Car c);
}
私の問題は、データベース内のすべてのCarオブジェクト間でSomeUniqueCodeプロパティの一意性を確認する方法です。そのプロパティは、オブジェクトのライフサイクル中いつでもユーザーによって変更されます(自動生成されません)。もちろん、1つの解決策はデータベースに一意のキーを配置することですが、それはDDDの原則ではありません。単一のオブジェクトを検証するために使用される仕様パターンを見てきました。そのパターンは、Carオブジェクトのセットにどのように適用されますか?
Specificationクラス(CheckUniqueCarSpecificationと呼びましょう)がICarRepositoryにアクセスすることは正当ですか?