问题标签 [repository-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
830 浏览

c# - 我将如何设计一个存储库来处理多种数据访问策略?

对于能够使用 ASP.NET MVC 和 C# 支持多个数据库层的存储库,骨架设计会是什么样子?如果我同时支持 LINQ to SQL 和 NHibernate,我想看看设计会是什么样子。我将如何创建我的数据库对象,并在我的 BLL 层中调用它的方法?

0 投票
2 回答
640 浏览

c# - 与其他项目(.NET)共享我的存储库(存储库模式)?

我正在尝试整理我的代码,我有许多项目都引用了我的服务层,即 DLL。这意味着当我分发一个新的服务层时,我必须上传一些通常相同的服务层..

当然,使用 ADD Reference 非常快,因为它的一个程序集与另一个程序集通信......

我想知道另一种方法的优缺点..

我可以使用 web 服务/wcf 来包装我的服务层,但这不是破坏对象..

那么速度呢,现在我的桌面应用程序需要调用 web 服务/wcf 而不是访问程序集引用?

我的服务层当然与我的数据层对话,而我的客户从不直接与数据层对话..

它是服务层的问题,这是我的业务逻辑在许多应用程序之间共享的地方。

桌面应用程序、2 个网站、2 个 wcf 项目(用作 Web 服务)

关于如何在不重复我的代码的情况下实现最快的场景的任何建议,这对我现在正在做的事情有影响,即

每个应用程序(桌面、网站、wcf)在同一个 DLL 上都有副本并有引用(在 vs 2008 中添加引用)..

想法?

0 投票
2 回答
294 浏览

c# - .NET 1.1 的存储库模式

将存储库模式与 .NET 1.1 (C#) 一起使用的典型方法是什么?

我正在寻找与Stack Overflow question类似的东西,除了在 .NET 1.1 中,我没有泛型,所以我只是想看看它是否可能(我确定它是),并且它通常是如何完成的。

0 投票
2 回答
2087 浏览

c# - 存储库模式,共享连接

我发现了很多存储库模式的示例,所有这些示例都显示存储库管理它自己的连接生命周期。我想知道人们如何处理他们想要跨多个存储库共享单个连接的情况?

我问的主要原因是因为当我使用 TransactionScope 创建事务时,我真的不希望它升级为 DTC 事务。虽然设置简单,但它似乎有点重量级。

我在想的是使用类似于 TransactionScope 的东西来管理连接生命周期。但是,似乎将数据访问与业务流程联系了一点。我的意思的一个例子是:

0 投票
1 回答
73 浏览

c# - 限制来自存储库的结果

我有一个非常标准的存储库模式,在构建时将存储库注入到我的 MVC 控制器中。每个 AppDomain 初始化存储库一次,并由其他控制器共享。存储库使用 NHibernate ISessions 和 ICriteria 访问数据库,但访问是使用 ListXYZ 方法公开的,而不是直接接受 ICriteria。

我现在需要一种巧妙的方法来限制在某些情况下返回的结果,例如,可以列出给定市场中的所有产品,仅在调用操作时才知道。

我不想在每次调用 ListXYZ 方法时都传递这个限制,因为它会导致很多重载方法。理想情况下,我希望能够像以前一样访问存储库,但应用了限制。就像是:

任何建议我应该怎么做?还是我让自己太复杂了?

0 投票
4 回答
542 浏览

linq-to-sql - 使用没有生成模型的 LINQ To SQL 的存储库模式

我想在存储库模式中使用我自己的模型类。我不想依赖 LINQ to SQL 生成的类。这可行吗?我如何处理Where( 和其他选择时它 aFunc<MyModel, bool>但 LINQ to SQL 需要 a Func<LinqToSqlModel, bool>

我已经设计了这个,但我可能开始过度设计它......

这是不是重定向太多了?

我想要做的就是拥有一个MyModel能够在后端进行任何实现的存储库,无论是 LINQ to SQL、LINQ to Enities 等。有人有任何资源吗?

0 投票
2 回答
2611 浏览

asp.net-mvc - .NET RIA 服务与 MVC 样式存储库?

我有一个包含多个项目的解决方案,包括两个共享存储库和模型的 asp.net mvc 项目,它们位于外部程序集中(也在同一个解决方案中)。本质上...

核心/
-存储
库-模型

国内.Web/
-Basic MVC Site,引用核心项目

International.Web/
-Basic MVC Site,引用核心项目

我想做的是为所有数据库管理员构建一个 Silverlight 3 / RIA 服务应用程序。很好,除了 RIA 服务(大部分)仅在实体框架中真正记录 - 您可以找到一些关于 Linq2Sql 的信息,甚至更少关于使用 POCO 支持 RIA 的信息。

我需要的是你在 POCO 中使用 RIA 的最佳参考,但如果有一些关于将它与 MVC / Nerddiner 风格的存储库模式一起使用的文档,那就更好了。

谢谢!

0 投票
2 回答
254 浏览

c# - 我也应该对我的 SQLRepository 运行单元测试吗?

我正在开发一个基于存储库模式的域模型,并且我作为 TDD 的一部分的所有单元测试都针对测试存储库。

我的问题是:我在什么时候针对存储库的 SQL 版本创建集成测试?

我担心的是从对象(测试存储库)访问数据的代码可以正常工作。但是数据库版本(SQL 存储库)在幕后是如此不同,以至于我在 SQL 存储库中的重要代码最终将无法工作并且本身未经测试。我如何确保它按预期工作?我是否遗漏了有关该过程的某些内容?

问候。

0 投票
3 回答
2196 浏览

c# - C# 接口中的“重命名”继承方法

Repository Pattern在开发 ASP.NET MVC 应用程序(使用 .NET 3.5、ASP.NET MVC 1.0 和实体框架)时试图理解 ,。我已经获得了足够的依赖注入,并且都可以使用一种控制器和一种实体类型,但是现在我已经实现了对不同类型之间关系的支持,但我被卡住了。

在我见过的所有示例中,存储库接口都被称为IContactsRepository,并且包含Contact仅与项目有关的(CRUD)方法。我想实现 的分组Contacts,所以我有一个名为 的实体类型Group,以及一个IGroupRepository用于处理组(CRUD)操作的接口。

  • 与多个实体类型相关的方法属于哪里(在这种情况下,例如AddToGroup添加 aContact到 a的方法Group)?

我尝试为存储库创建更大的继承结构,并在其中创建了以下接口:

然后我尝试创建一个继承的主存储库,IRepository如下所示:

一旦我尝试使用此代码从我的控制器调用存储库中的方法之一

Get<Contact>()我收到一条关于继承 viaIContactsRepositoryGet<Group>()来自 via之间歧义的构建错误消息IGroupsRepository。我知道这是不允许的,因为IRepository 继承了具有不同类型的相同通用接口(参见链接文章中的示例 5)。

  • 现在,由于我通过其他接口继承,是否有机会“覆盖”这些方法的名称,例如如下所示?

    /li>

这样,我可以IRepository.Getcontacts毫无歧义地访问它。是否有可能,或者是否有任何解决此问题的方法?

还有一个新问题,需要澄清:

  • 无论如何在控制器的调用中指定Get()我想要哪种方法?

  • 解决我最初的问题的最佳方法是什么 - 需要一个可以处理很多事情的存储库,而不仅仅是一种实体类型?

编辑:添加了类的代码示例Repository并从Controller.

0 投票
2 回答
2370 浏览

domain-driven-design - DDD、存储库和封装

如果人们认为这是被打死的,我提前道歉。我刚刚花了几个小时在 SO 中搜索和阅读了许多优秀的帖子,但我仍然感到困惑。

我困惑的根源是 DTO 与 DDD 和存储库。我希望我的 POCO 域对象具有智能,并且我想从存储库中获取它们。但似乎我必须违反一些封装规则才能使其工作,而且它似乎可以将 DTO 置于他们的头上。

下面是一个简单的示例:在我们的目录应用程序中,一个部件可以是一个包含许多其他部件的包。因此,Part POCO 有一个返回 IEnumerable<Part> 的“GetChildren()”方法是有意义的。它甚至可能在列表退出时做其他事情。

但是该列表是如何解决的呢?似乎存储库就是答案:

所以现在我的目录的消费者,除了(正确地)从存储库中加载部件外,还可以通过直接调用 GetChildren(part) 来绕过一些部件封装的逻辑。那不是很糟糕吗?

我读到存储库应该提供 POCO,但 DTO 有利于在“层之间”传输数据。计算了许多部件属性 - 例如,价格是根据复杂的定价规则计算的。价格甚至不会出现在来自存储库的 DTO 中 - 因此似乎将定价数据传递回 Web 服务需要 DTO 使用该部件,而不是相反。

这已经变得太长了。我的头在哪里拧开?