IREPOSITORY およびリポジトリごとのエンティティ
-
25-10-2019 - |
質問
エンタープライズアカウンティングアプリケーションのアーキテクチャを変更しています。 IrePositoyを使用しますu003CTDataModel>パターンですが、少し違いがあります。ベースのIREPositoryから派生するすべてのエンティティのインターフェイスを作成しますu003CTDataModel>。たとえば、私のエンティティがクライアント、製品、注文であれば、私は持っているでしょう
iClientRepository:Irepositoryu003CClientModel>
iProductrePository:Irepositoryu003CProductModel>
IORDERREPOSITORY:IREPositoryu003COrderModel>
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 <>サンプルを見ましたが、この組み合わせを使用するものは見つかりませんでした。これをするのに良いことはありますか?まったく正しいですか?他の長所と短所は何ですか?
前もって感謝します
解決
それはあなたが創造日をどのように考えるかに依存すると思います。ドメインの一部ですか?ドメインロジックは値に依存しますか?
たとえば、システムには「作成者と作成日が現在のユーザーと現在の時刻と等しくない」(その場合、作成する」能力が必要ですか?バックアップからデータを復元すると、元の値を保持しなかった場合、何かが壊れますか?作成日がクライアントの時間型、サーバーデータタイム、またはデータベースのデータタイムであるかどうかは重要ですか?
上記のすべてに対する答えがいいえの場合、a)作成日はドメインの一部ではないので、外部から設定できますb)本当に必要ですか?もしそうなら、私はインフラストラクチャの懸念 - キャッシュ管理、通知を変更するなどのためだけに推測しています。それはそうですか?