これは、DDDに頭を悩ませている私の周りに基づいたシリーズの一部を形成します:)
前の質問に続きますが、背景知識は必要ありません。基盤となるデータベースに関係がある場合に、別のシステムからWCFサービスを消費するシステム
ドキュメントシステムとHRシステムがあります。HRシステムは、ドキュメントと、ドキュメントに関連するHR固有のデータを保存する必要があります。
私が最初に考えたのは、ドキュメントシステムへの呼び出しは、HRシステムのアプリケーションサービスで行う必要があるということでした(不要なコードは削除されました)。
public class HRDocumentService
{
public void SaveDocument(string filename, string employee)
{
long documentLibraryId = _documentLibraryService.SaveDocument(filename);
HRDocument hrDocument = HRDocument.CreateDocument(documentLibraryId, employee);
_hrDocumentRepository.Save(hrDocument);
}
}
リポジトリは次のようになります。
public class HRDocumentRepository
{
public long Save(HRDocument hrDocument)
{
_session.Save(hrDocument);
}
}
しかし、Jak Charltonはこの記事で、 「リポジトリの背後にあるものは何ですか?ほとんど何でも好きです。そうですね。正しく聞こえました。データベースを使用することも、さまざまなデータベースを使用することもできます。リレーショナルデータベースまたはオブジェクトデータベースを使用できます。 。メモリ内データベース、またはメモリ内アイテムのリストを含むシングルトンを持つことができます。RESTレイヤー、SOAサービスのセット、ファイルシステム、またはメモリ内キャッシュを持つことができます…」
だから今、私はサービスがこれだけであるべきだと思っています:
public class HRDocumentService
{
public void SaveDocument(string filename, string employee)
{
HRDocument hrDocument = HRDocument.CreateDocument(documentLibraryId, employee);
_hrDocumentRepository.Save(hrDocument);
}
}
次のように、リポジトリ内のドキュメントライブラリサービスを呼び出します。
public class HRDocumentRepository
{
public long Save(HRDocument hrDocument)
{
long documentLibraryId = _documentLibraryService.SaveDocument(filename);
hrDocument.DocumentLibraryId = documentLibraryId;
_session.Save(hrDocument);
}
}
このように、間違いなく、担当者は依然として永続性にのみ責任があります。
私はここで正しい方向に進んでいますか、それとも離れていますか?