ASP.NET MVC を使用して Web ベースのアプリケーションを開発しています。私は、薄い/貧血モデルではなく、豊富なドメイン モデルを使用しようとしています。
Onion アーキテクチャに沿ってソリューションをモデル化しました。さまざまなプロジェクトは次のとおりです。
- {}.Domain.Core - インフラストラクチャ レイヤーに実装される IDbContext などのドメイン オブジェクトとインターフェースが含まれます
- {}.Database - データベース プロジェクトです。
- {].Infrastructure - ロギング、データ アクセスなどの実装が含まれています。
- {}.Web - ビューとコントローラ
**** データ アクセスは dapper を使用して行われ、IDbContext は 2 つの単純なコマンド、クエリ インターフェイスのラッパーです。各クエリを個別のクラスとして分離しました。
議論のために、私はアプリケーションのごく一部を取り上げています。
タグ、権限などの他のメタデータとともにドキュメントを含む、バージョン管理されたドキュメント ライブラリがあります。
私の文書オブジェクトの単純化されたモデルは以下のとおりです
これらの各操作にはビジネス ロジックが含まれているため、ドメイン オブジェクト内で操作を定義する必要があります。「削除」を操作としましょう。操作を実行する必要があります
- ユーザーが削除する権限を持っているかどうかを検証する
- この削除によって影響を受ける関連付けがないかどうかを確認します
- 進行中のワークフローがないかどうかを確認する
- トランザクションでデータベースから実際のアイテムを削除する
上記の例に示すように、この操作を完了するにはデータベース コンテキストが必要です。モデリングがドメインオブジェクトにIDbContextを持たせ、公開されたクエリを実行できるようにすることである場合、私が現在考えている方法。
コントローラー クラスでは、ドメイン オブジェクトを呼び出して操作を実行します。
ドメイン オブジェクトで IDbContext を渡しても問題ないかどうかわかりません。そうでない場合、これをモデル化するためのより良い方法は何ですか?
1) ほとんどの場合、コントローラーはサービス層の最初の層として機能する 2) サービス層はドメインから別のクラスに同じメソッドを複製しているだけなので、別のサービス層を持つことに確信が持てない
このデザインを改善する方法を教えてください。