次のプロジェクトを含むVSソリューションがあります。
-GUI
-DataAccess
-BusinessLogic
-BusinessObjects
しかし、メイン モデル クラスはどこにあるのでしょうか。これは通常、データ アクセス レイヤーと仮想グリッドを使用してモデル内のデータを表示する GUI からの結果である一連のオブジェクトのキャッシュです。質問は、MVC または MVP を使用しても同じです。
考え?
次のプロジェクトを含むVSソリューションがあります。
-GUI
-DataAccess
-BusinessLogic
-BusinessObjects
しかし、メイン モデル クラスはどこにあるのでしょうか。これは通常、データ アクセス レイヤーと仮想グリッドを使用してモデル内のデータを表示する GUI からの結果である一連のオブジェクトのキャッシュです。質問は、MVC または MVP を使用しても同じです。
考え?
これは主観的な質問ですが、多くの場合、モデル オブジェクトがインフラストラクチャに直接依存しないようにするために、人々はそれらを別のプロジェクトに配置することがよくあります。また、これらのモデル オブジェクトを使用する他のプロジェクトについても考慮する必要があります。
機能を個別の展開可能なユニット (アセンブリ) に分割するもう 1 つのオプションは、チームがより独立して機能できるようにすることです。展開の頻度とチームの自律性に基づいてプロジェクトを分けます。
最後に、モデル オブジェクトがリモートで呼び出され (.NET リモート処理のように)、Web サーバーとは別のアプリケーション サーバーで提供されるプロジェクトをいくつか見てきました。このアプローチはお勧めしませんが、オプションです。
それらを再利用する予定がなく、それらを同じアセンブリに配置すると、そのプロジェクトで定義された他のものとの相互依存関係を作成できるという事実を認識しているが、そうしないほど賢い場合は、それらをすべて同じプロジェクトに配置できます。
とはいえ、99% の確率でこれらのプロジェクトを持っています。
ただし、プロジェクトのニーズを考慮する必要があります。
私は持っている傾向があります
Justice.Project.Core
— POCO ドメイン モデル — つまり、ビジネス オブジェクト)Justice.Project.Data
— 永続性スキームが存在する NHibernate マッピングなどJustice.Project.Services
— リポジトリ、およびビジネス オブジェクトに簡単には収まらないビジネス ロジックJustice.Project.(Web|UI)
モデルは、ビジネス オブジェクトです(またはそうあるべきです)。
私のソリューションには 3 つの (非テスト) プロジェクトがあります
モデル オブジェクトが POCO に入ることに同意します。Order オブジェクトがあるとしましょう。私の質問は、注文のコレクションを格納するクラスはどこにありますか??
それはあなたのビジネス次第です。おそらく、いくつかの異なる場所に注文のコレクションがあるでしょう...
顧客オブジェクトでは、各顧客が注文のコレクションを持つ必要があるため、そこに 1 つ存在します。
部門がある場合、各部門には、作成した注文のコレクションが必要です。
倉庫がある場合、各倉庫には、フルフィルメントを担当する注文のコレクションがある場合があります。
一部のオブジェクトには親がありませんが、それで問題ありません。私のシステムには、クライアントがいます。クライアントの実際の所有者は私たち (ビジネス) ですが、システムには「私たち」というオブジェクトはありません。クライアントのリストを取得したい場合 (この場合)、リポジトリにクエリを実行します。
IRespoistory<Client> repository = new Repository<Client>();
IList<Client> clients = repository.GetAllClients();
同じことがあなたの注文にも当てはまります。
I'd recommend checking out this DDD book: http://www.amazon.com/gp/product/0321268202/ref=s9k2a_c1_at1-rfc_p-3237_p?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-1&pf_rd_r=1BWAPTN787CTZXJDV5BA&pf_rd_t=101&pf_rd_p=463383351&pf_rd_i=507846