0

企業会計アプリケーションのアーキテクチャを変更しています。IRepositoy<TDataModel> パターンを使用しますが、少し違いがあります。ベース IRepository<TDataModel> から派生するすべてのエンティティのインターフェイスを作成します。たとえば、私のエンティティがクライアント、製品、および注文である場合、私は

IClientRepository : IRepository<ClientModel>
IProductRepository : IRepository<ProductModel>
IOrderRepository : IRepository<OrderModel>

public interface IRepository<TDataModel, TId>
{
    TDataModel Get(TId Id);
    IList<TDataModel> List();

    TDataModel Add(TDataModel Item);
    TDataModel Add(TDataModel Item, IContext executingContext);

    void Update(TDataModel Item);
    void Update(TDataModel Item, IContext executingContext);

    bool Delete(TId Id);
    bool Delete(TId Id, IContext executingContext);

    IList<TDataModel> Where
       (System.Linq.Expressions.Expression<Func<TDataModel, bool>> criteria);
}


public interface IProductRepository : IRepository<DataModel.Product, int>
{

}

このアプローチを使用する理由は、いくつかのドメイン モデルの属性を BLL ではなく DAL に設定したいからです。

IRepository<> のサンプルをいくつか見ましたが、この組み合わせを使用するものは見つかりませんでした。私は知りたいのですが、これを行うには何か良いことがありますか? それはまったく正しいですか?他の長所と短所は何ですか?

前もって感謝します

4

1 に答える 1

0

作成日をどう捉えるかによると思います。それはドメインの一部ですか?値に依存するドメイン ロジックはありますか?

たとえば、システムには「代理で作成」する機能が必要ですか (この場合、作成者と作成日は現在のユーザーと現在の時刻と等しくなりません)。バックアップからデータを復元しても元の値が保持されない場合、何かが壊れますか? 作成日がクライアントの timetime、サーバーの datetime、またはデータベースの datetime のいずれであるかは重要ですか?

上記のすべてに対する答えが NO の場合、A) 作成日はドメインの一部ではないため、外部から設定できます B) 本当に必要ですか? もしそうなら、キャッシュ管理、変更通知などのインフラストラクチャの問題についてのみ推測しています。そうですか?

于 2011-01-30T09:40:29.187 に答える