タグ付けされた質問 「repository-pattern」

11
(データベース)統合テストは悪いですか?
一部の人々は、統合テストはすべての種類の悪い点と間違っていると主張しています -すべてを単体テストする必要があります。さまざまな理由で、私は常に好きではないオプション。 場合によっては、単体テストでは何も証明されないことがわかります。 例として、次の(PHPでの)単純な(単純な)リポジトリー実装を取り上げましょう。 class ProductRepository { private $db; public function __construct(ConnectionInterface $db) { $this->db = $db; } public function findByKeyword($keyword) { // this might have a query builder, keyword processing, etc. - this is // a totally naive example just to illustrate the DB dependency, mkay? return $this->db->fetch("SELECT * …

9
リポジトリはIQueryableを返す必要がありますか?
のインスタンスを返すリポジトリを持つプロジェクトをたくさん見てきましたIQueryable。これにより、追加のフィルターとソートをIQueryable他のコードで実行でき、異なるSQLが生成されます。私はこのパターンがどこから来たのか、それが良いアイデアであるかどうかに興味があります。 私の最大の懸念はIQueryable、データベースが列挙されると、しばらくするとデータベースにヒットするという約束です。これは、エラーがリポジトリの外部にスローされることを意味します。これは、Entity Framework例外がアプリケーションの別のレイヤーでスローされることを意味する場合があります。 また、過去(特にトランザクションを使用する場合)に複数のアクティブな結果セット(MARS)の問題に遭遇しましたが、このアプローチはこれがより頻繁に発生するように聞こえます。 リポジトリコードを終了する前に、常にLINQ式を呼び出すAsEnumerableかToArray、各LINQ式の最後でデータベースがヒットすることを確認しました。 IQueryableデータレイヤーのビルディングブロックとして戻ることが役立つかどうか疑問に思っています。あるリポジトリが別のリポジトリを呼び出してさらに大きなIQueryable。

2
リポジトリと作業ユニットの関係
リポジトリを実装します。リポジトリのコンシューマは複数の操作を実行でき、一度にコミットしたいので、UOWパターンを使用したいと思います。 問題に関するいくつかの記事を読んだ後、他の方法で行われている記事によっては、この2つの要素を関連付ける方法がまだわかりません。 UOWはリポジトリの内部にある場合があります。 public class Repository { UnitOfWork _uow; public Repository() { _uow = IoC.Get<UnitOfWork>(); } public void Save(Entity e) { _uow.Track(e); } public void SubmittChanges() { SaveInStorage(_uow.GetChanges()); } } そして時々それは外部です: public class Repository { public void Save(Entity e, UnitOfWork uow) { uow.Track(e); } public void SubmittChanges(UnitOfWork uow) { SaveInStorage(uow.GetChanges()); …

5
リポジトリパターンが最新のORM(EF、nHibernate)で過剰すぎる場合、より優れた抽象化は何ですか?
私は最近、エンティティフレームワークのような強力なORMでリポジトリパターンを使用することに対して多くの議論を読みました。リポジトリパターンは作業単位機能とともにリポジトリに似た機能を組み込んでいるからです。 単体テストのような状況でパターンを使用することに対するもう1つの論点は、より汎用的な実装がIQueryableを活用するため、リポジトリパターンは漏れやすい抽象化であるということです。 リポジトリパターンの使用に反対する議論は私には理にかなっていますが、提案された抽象化の代替方法はしばしば混乱を招き、問題と同じくらいやり過ぎです。 Jimmy Bogardsのソリューションは、抽象概念を吹き飛ばすことと、彼自身のアーキテクチャを導入することの組み合わせのようです。 https://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/ リポジトリが不必要になっている別の例....しかし、私のアーキテクチャを使用してください! http://blog.gauffin.org/2012/10/22/griffin-decoupled-the-queries/ 別の... http://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework 私は、それ自体が設計されていない「過度に複雑な」リポジトリパターンアプローチの明確な代替物や代替物を見つけていません。

3
DDDでは、リポジトリはエンティティまたはドメインオブジェクトを公開する必要がありますか?
私が理解しているように、DDDでは、集約ルートでリポジトリパターンを使用することが適切です。私の質問は、データをエンティティまたはドメインオブジェクト/ DTOとして返す必要がありますか? たぶんいくつかのコードが私の質問をさらに説明するでしょう: エンティティ public class Customer { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } このようなことをする必要がありますか? public Customer GetCustomerByName(string name) { /*some code*/ } またはこのようなもの? public class CustomerDTO { public Guid Id { get; set; …

2
リポジトリパターンとDALオブジェクトの作成
私が学んだ限り、にはIRepositoryが含まれている必要がありますCRUD。その後、我々はこれを継承するIRepositoryような当社の他のインターフェイスにIProductして実装するIProduct具象クラスをProductRepository、などの方法でGetAllProducts()、Top5Products()。 n層アーキテクチャでも同じことができます。作成、のようにDAL Class Library、そこにクラスを定義するProductような方法でGetAllProducts()、Top5Products()。 両方において、DAL.ProductそしてRepo.ProductRepository、我々は初期化したクラスDB ContextでEntity Framework、当社の関連データを照会します。 呼び出しは両方Repo.ProductRepositoryまたはDAL.Productメソッドから似ていますBLL これらの類似点を考慮して、私の質問はレポの利点は何ですか?私はn層アーキテクチャを使用して非常に簡単に同じことを行うことができます(Controller、BLL Class Library、DAL Class Library)。

1
作業ユニットパターンを使用したビジネスレイヤーとリポジトリの接続
私の質問は、Stack Overflowでのこれと同様です。ビジネスレイヤー内で作業ユニット/リポジトリを使用する正しい方法は何ですか? シナリオ: .Netソリューション DBからオブジェクトを取得するために使用されるIRepository IUnitOfWorkを使用して複数のリポジトリ間でトランザクションを許可 これは私には理にかなっていて、私はこれらの線に沿ってうまく機能する何かを実装しました。ここで、ビジネスロジックレイヤーを紹介したいと思いますが、3つの要素(BLL、UnitOfWork、およびリポジトリ)を整理することに頭が悩んでいます。 私の理解: リポジトリ-データの取得、操作 UnitOfWork-永続性 BLL-ビジネスに関連するロジック(「現実世界」)(その用語は嫌いです!) ASP.Net MVCフロントエンドがあるとします。 BLLはどのように見え、それを使用するMVCコントローラーはどのように見えますか? 参考までに:私のIUnitOfWork / IRepository実装が私の混乱の根本的な原因であるのではないかと思います。 public class IRepository<T> { private IObjectSet<T> objSet; public IRepository<T>(IUnitOfWork uow) { objSet = uow.CreateObjectSet<T>(); } public IQueryable<T> Add(T entity) { objSet.Add(entity); } //etc. etc. for delete, attach, getall } したがって、BLLがある場合は、それをIUnitOfWorkに渡して、必要なIRepositoryインスタンスを作成できるようにする必要があるように感じます。しかし、BLL(フロントエンドとは別のDLL)は、ビルドするIRepositoryの実装をどのように「認識する」のでしょうか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.