2011-07-26 9 views
4

私はそのようなリポジトリを設計する際のフィードバックが必要です。深刻な夜には安心して休憩するのに役立ちます...
Webフォームのテストを書く意思がありません。
明日、来月または来年にORMまたはデータベースを変更するつもりはありません。 クエリロジックを集中化し、コードの重複を避ける場所が必要です。右?...インタフェースがなく、抽象化=収差のないリポジトリ?

public class StuffRepository // no contract, I simply instanciate StuffRepository 
{ 
    // Scope is Per-Request, DI, no abstraction... 
    protected StuffDb DbContext = ObjectFactory.GetInstance<StuffDb>(); 

    // Returns a Stuff, an Entity (EF), no abstraction 
    public Stuff Get(Guid id) 
    { 
     return DbContext.Stuff.FirstOrDefault(s => s.Id == id); 
    } 
} 

私は完全に抽象化されたリポジトリ、個々のページのテスト容易性と抽象化されたエンティティ(DTOとドメイン/モデルオブジェクト)のためのWebフォームの上にMVPアーキテクチャで働いています。それは決して終わらない、それは十分ではない、完璧ではない。

私はすべての規則、原則に違反し、これをリポジトリと呼ぶ異常を生み出していますか?

この名前をStuffDALに変更すると、突然意味がありますか?

おかげで私に

+3

コードをテストしたり変更したりするつもりがない場合は、おそらくそのまま完璧です。しかし、誰がコードを変更しようとしていますか?変化は私たちに強制され、準備が必要です。なぜ私がこれを「適切に」構築していないのか疑問に思う。あなたが悩まされることができないか、他の制約があるからというだけですか?たとえば、コード内の不要なノイズをすべてカットすることが目的の場合は、代わりにmirco-ormを参照してください。しかし、ユニットテストをしてください - あなたは後で自分自身に感謝するでしょう。 –

+0

ORMやデータベースを交換するのは私の意図ではありません。なぜ私はここでコードを変更できないのか分かりません。私が理解しない限り?テストを書くことができず、すべてを抽象化することができない理由があります。まず、Webフォームをテストするには、追加のサービスレイヤーが必要です。テストを記述して維持するには、追加時間が必要です。要約するには、抽象化するためにDI抽象コンポーネントに時間がかかり、Webフォームのページのコンストラクタやon_initイベントでは、厳密なスケジュールでプロジェクトを提供するだけであり、感情的にも個人的にも関与することはできません。 – maxbeaudoin

+0

小さな孤立したコンポーネントのテストを書きますが、Webフォームはテストしません。私はコントローラをテストしなければならない。 – maxbeaudoin

答えて

3

私は正直言ってリポジトリについて同じように感じます。最終的に先月のことを読んだ後、私は本当にリポジトリをすべて行っているという印象を受けました一緒に間違っている。私が思ったのは、リポジトリだと思ったのは、DAOやDALだけでした。「永続性、私のオブジェクトを私に戻してください。」、または「永続性、後でそれが必要になるまでこのオブジェクトを保持します」という抽象化でした。

あなたが知っていることは、私が本当に必要とするものを正確に抽象化し、テストするのが簡単で、仕事を終わらせることができ、変更するのが簡単であれば、

これは、Eric Evansによってオブジェクトのインメモリストアが想定されているリポジトリですか?いいえ、そうではありませんが、ちょっと、私はあなたのためにそれをしません。

+0

私は新しいウェブサイトを立ち上げようとしていますが、私が正しい軌道にいることをまだ確信していません。 – maxbeaudoin

+0

とにかくこのように動作するのは、同じ場所にあるオブジェクトにクエリを実行していることです.DALをリポジトリに「アップグレード」して、たとえばキャッシュシステムを追加する場合は非常に簡単です。 – Arthis

2

、リポジトリは再び例えば、あなたのデシベルを取得しないキャッシングなど、あなたのデータの上にあなたのグローバルな持続性を与えるためにここにあります。それはCRUD以外の専用の機能です。 DALでは、アプリケーションからの別の呼び出しでデータを唯一作成しているデータベースへのアクセス権を与えていますが、通常はデータベースへのCRUD呼び出しに限定されています。

あなたが書いたことは間違いありません第二の選択肢では。他にもいくつか追加して、私はそれほど厳しくはないかもしれません。

がありますが、hereという外観があり、両方の違いがすべて相対的であることがわかります。

インターフェイスを使用しないことにしても、私はそれをおすすめしません。いくつかの行を追加してからしばらくすると便利です...

+0

ありがとう、私は必要なのはDAOだと思う。しかし、私は仕様が気に入っていて、実装するだけかもしれません。私はインターフェースを追加する作業もしています。 – maxbeaudoin

関連する問題