これは明確な答えがある質問ではありませんが、私のアーキテクチャについてアドバイスが必要です。このトピックについては、さまざまな意見があるかもしれません。
アーキテクチャを愚かなエンティティから豊富なドメイン オブジェクトに移行しようとしています。現在のバージョンでは、ビジネス ロジックを表す読み取り専用のプロパティとメソッドを持つ抽象ドメイン オブジェクトがあります。
abstract class Project
{
public string PropertyName { get; protected set; }
public void Setup(SetupData data)
{
...
Save();
}
protected abstract void Save();
}
それらから派生して、永続エンティティへのマッピングを実装し、保存ロジックを実装します。
class MongoProject
{
MongoProject(ProjectDocument document, Action<ProjectDocument> save)
{
MapFrom(document);
}
public override Save()
{
MapTo(document);
save(document);
}
}
これは非常に簡単に機能します。パブリック セッターがなく、ドキュメントとのマッピングであってもテストできるため、プロジェクトは常に有効です。
しかし、私はいくつかの問題にも気付きました:
- 私はいつもいくつかのプロパティをマッピングするのを忘れていました.MongoProjectに何をシリアル化する必要があるかを伝える方法はありません.
- プロジェクトが複雑な集約ルートである場合は特に、save メソッド内で何が変更されたかわからないため、マッピングの実装が比較的複雑になることがあります。私の状況では、mongodb で永続性を実装するのは非常に簡単でしたが、エンティティ フレームワークでは悪夢でした。
アプリケーションの永続性をどのように解決しますか?また、マッピングの問題に対する他の解決策はありますか?