「アプリケーションコード」はリポジトリを呼び出す必要があります。アプリケーション コードがどのようにホストされるかは、インフラストラクチャの問題です。アプリケーション コードをホストする方法の例としては、WCF サービス、Winforms/WPF アプリケーション、または Web サーバーがあります。
リポジトリの実装は、集約ルートとその子エンティティへの変更を追跡し、それらをデータベースに保存する役割を果たします。
次に例を示します。
ドメイン プロジェクト
public DomainObject : AggregateRootBase //Implements IAggregateRoot
{
public void DoSomething() { }
}
public IDomainObjectRepository : IRepository<DomainObject>, IEnumerable
{
DomainObject this[object id] { get; set; }
void Add(DomainObject do);
void Remove(DomainObject do);
int IndexOf(DomainObject do);
object IDof(DomainObject do);
IEnumerator<DomainObject> GetEnumerator();
}
実施プロジェクト
public SqlDomainObjectRepository : List<DomainObjectDataModel>, IDomainObjectRepository
{
//TODO: Implement all of the members for IDomainObjectRepository
}
応用プロジェクト
public class MyApp
{
IDomainObjectRepository repository = //TODO: Initialize a concrete SqlDomainObjectRepository that loads what we need.
DomainObject do = repository[0]; //Get the one (or set) that we're working with.
do.DoSomething(); //Call some business logic that changes the state of the aggregate root.
repository[repository.IDof(do)] = do; //Save the domain object with all changes back to the db.
}
複数の集約ルートへの変更をトランザクション化する必要がある場合は、変更がすべてか無かで行われるようにする必要がある場合は、Unit of Work パターンを検討する必要があります。
これが物事を明確にするのに役立つことを願っています!