ドメイン モデル (MVC など) をビジネス ロジックを保持するものとして定義する記事をいくつか読みました。モデル プロパティ以外のメソッドを保持するモデルを考えたことはありません。
ドメインモデルに機能やビジネスロジックを持たせることをサポートする考え方が実際にあるのか知りたいです。
前もって感謝します。
ドメイン モデル (MVC など) をビジネス ロジックを保持するものとして定義する記事をいくつか読みました。モデル プロパティ以外のメソッドを保持するモデルを考えたことはありません。
ドメインモデルに機能やビジネスロジックを持たせることをサポートする考え方が実際にあるのか知りたいです。
前もって感謝します。
もちろん、ビジネス ロジックはドメイン モデル内にある必要があります。しかし、ドメイン モデルは単なるエンティティ フレームワーク エンティティではありません。ドメイン モデルは、ビジネス ドメインを反映する多数の小さなクラスで構成されます。
私の典型的な MVC アプリケーションでは、通常、いくつかのタイプのビジネス ロジックを次のように分割します (ただし、これらに限定されません)。
DbSet<Entity>
。ドメイン モデルの構築は、UserBusinessLogic などの BusinessLogic や UserServices などのサービスを使用してクラス プレフィックスを作成するだけではありません。1 つのことを担当する多くの小さなクラスで構成する必要があります。もちろん、デザイン パターンの使用、フレームワークの選択、エラー処理、ローカリゼーション、キャッシュなどのインフラストラクチャ コンポーネントが必要になります。
トレードオフの世界へようこそ。:)
MVCModel
は確かにビジネス ロジックを持つことができます。MVC の責任については、ここで詳しく説明されています。ここでは、貧血ドメイン モデルに関する説明があります。これで問題が解決するかもしれません。
MSDNから:
MVC Web アプリケーションのアプリケーション モデルを表すクラスに提供されるモデル。通常、このフォルダーには、オブジェクトを定義するコードと、データ ストアとのやり取りのロジックを定義するコードが含まれています。通常、実際のモデル オブジェクトは別のクラス ライブラリにあります。ただし、新しいアプリケーションを作成するときは、ここにクラスを配置し、開発サイクルの後半で別のクラス ライブラリに移動することがあります。
問題を混乱させる可能性があるのは、多くの ASP.Net MVC 実装が を使用View Models
していることです。これは、View と Controller の間でプレゼンテーション層のデータを転送するために使用されるクラスです。
典型的な大規模なプロジェクト セットアップでは、通常、Models フォルダーを削除し、代わりに EF データ レイヤー、エンティティ、およびビジネス/サービス ロジックを完全に別のアセンブリに移動します。
私の経験に基づくと、ビジネス ロジックを配置するのに最適な場所は、コントローラーとモデルの間のレイヤーです。repositoryやtasks/commandsなど、いくつかの一般的なパターンを試してください。