1

インターフェイスのみでEntityFrameWorkクラスをラップしたい。IDal<T>CRUD operations

各Entityに対応したBL Data Modelを作成しようと考えた

意味がある場合は、TempEntity作成TempBlObjしてインターフェースしますIDal<TempBlObj>

そのようなタスクを完了するためのガイドラインはありますか?

実装に問題があったSave(TempBlObj)

エンティティへの保存は次の方法で行われます。

mDbEntities.SaveChanges();

これは、エンティティ参照で行われた変更を中継します。

解決策はありますか?

アップデート

IDal<T>インターフェイスをモックするためにこれをすべて行っています

たとえば、TempEntity.status を変更するには

ChangeStatus()一般的なメソッドではなく、具体的なメソッドを作成する必要がありますCRUDSave(BlObj item)

エンティティでの保存は次のように行われます

..take reference to some entity, do some change..

mMamDbEntities.SaveChanges();

Bl と具体的な EntityFW の間の依存関係を緩めるために BlObjects を追加しようとしました

より一般的な:

ORM を使用する場合、IDal<T>インターフェイス (CRUD操作) を使用してルーズ カップリングを行うためのベスト プラクティスは何ですか?

4

2 に答える 2

0

システムのリポジトリを計画する際に心に留めておこうとするいくつかの事実があります。

  • O/RM は、ストレージを認識しないエンティティを実装するのに役立つものです。つまり、事業体とDB体を具体的に分けているわけではありません。私はUserエンティティを持っています - そして、ORM はどのような方法であれエンティティを永続化する必要があります。ここでは追加のレイヤーを導入するつもりはありません。

  • 制限の少ないインターフェイスから始めます。

     
    interface IDal {
        T Get<T>(id);
        void Save(object o); //or T, if needed
        IQueryable<T> Query<T>();
    }

  • そして - それはかなりうまく嘲笑される可能性があります (Moq を使用したサンプル)。
     
    var users = new List<User>(){ /* Users here */}
    var mockedRepository = new Mock<IRepository>();

    //getup GET
    mockedRepository.Setup(
        self => self.Get<User>( It.IsAny<int>() )
    .Returns( (int id) => _users.First(u => u.Id == id) );

于 2012-10-26T09:01:55.860 に答える
0

エンティティを保存する責任は、エンティティ自体の仕事であってはなりません。それは悪い考えです。あなたの状況でリポジトリパターンを実装することを検討できます。

于 2012-10-25T09:09:20.227 に答える