Questions tagged «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,以确保在离开存储库代码之前已命中数据库。 我想知道返回IQueryable是否可用作数据层的构建块。我已经看到一些相当奢侈的代码,其中一个存储库调用另一个存储库以构建更大的代码IQueryable。

2
储存库和工作单元之间的关系
我将实现一个存储库,并且我想使用UOW模式,因为该存储库的使用者可以执行多个操作,因此我想一次提交它们。 在阅读了有关该问题的几篇文章之后,我仍然不知道如何将这两个元素联系起来,具体取决于文章是通过其他方式完成的。 有时,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(例如Entity Framework)一起使用的争论,因为它结合了类似存储库的功能以及工作单元功能。 另一个反对在单元测试之类的情况下使用该模式的论点是,存储库模式是一种泄漏抽象,因为更通用的实现利用了IQueryable。 反对使用存储库模式的论点对我来说很有意义,但是建议的替代抽象方法通常更令人困惑,并且看起来像问题一样矫kill过正。 吉米·鲍嘉(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 鉴于这些相似之处,我的问题是Repos有什么好处?我可以使用的多层架构与做同样的轻松得多(Controller,BLL Class Library,DAL Class Library)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.