私は顧客、注文などのエンティティを自分のドメインモデルで定義しています。データベース固有のタイプがドメインモデルまたはデータアクセスレイヤーに入っていますか?
私は、私のパーシスタンス層を表すためにIRepositoryというインターフェースを定義したいと思います。私はさらに、IRepositoryを実装するSQLRepositoryとCacheRepositoryを持っています。
ドメインモデルまたはデータアクセス層でIRepositoryを定義する必要があるのでしょうか?私はSQLRepositoryとCacheRepositoryはDALに行く必要があると思うが、IRepositoryもそこに行くのだろうか?
さらに、例えば、私のリポジトリはCustomerテーブルからCustomersのリストを返します。これはどうやって設計するのか分かりません.DALとDomain Modelでタイプを繰り返すようです。
:私のDALでclass Customer
{
public int id;
public string name;
}
:私のドメインでそう
var repository = new SQLRepository();
//Below repository.customers represents customer table
List<Customer> customers = repository.Customers.list();
:私はこのような何かをしたいアプリケーションでは
:以下の例を参照してください。
class SqlRepository:IRepository { public CustomerTable Customers; } class CustomerTable { public List<Customer> list(); }
これらのレイヤーを設計するより良い方法があるかどうかを知りたかったですか?
* UPDATE
私はすでに別のクラスライブラリ/アセンブリで定義されDALとドメインを持っています。当初、私はデータベーステーブルのレコードを表すCustomerのようなPOCOエンティティを持つと思っていましたが、Customer.Add(customer)はどこに宣言しますか?それはDALに入っていますか?私はDALでビジネスルールを望んでいません。エンティティにメソッドを追加し始めると、永続ロジックとビジネスロジックが複雑になります。
可能であれば、独自のアセンブリでレイヤーを分割することも考えています。 – mozillanerd
はいレイヤーを別々のアセンブリに分割します。これにより、物理層にレイヤーを配布する機会も与えられます。 –
私は既にDALとドメインを異なるクラスライブラリ/アセンブリで定義しています。当初、私はデータベーステーブルのレコードを表すCustomerのようなPOCOエンティティを持つと思っていましたが、Customer.Add(customer)はどこに宣言しますか?それはDALに入っていますか?私はDALでビジネスルールを望んでいません。エンティティにメソッドを追加し始めると、永続ロジックとビジネスロジックが複雑になります。 – newbie