问题标签 [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 投票
2 回答
2617 浏览

design-patterns - 存储库模式是否与 Asp.net 提供程序模型相同?

从 Asp.net 2.0 开始,就有了提供者模型。在实现细节上,提供者是派生自 ProviderBase 的类,它是一个抽象类而不是接口,但无论如何提供者模型都在那里,因此我们可以通过编辑 web.config 来换入不同的实现。例如,如果您创建一个博客应用程序,您可能有一个 BlogProvider : ProviderBase,那么您可以有 BlogProvider 的实现,例如:SqlBlogProvider、OracleBlogProvider 甚至 MockBlogProvider 用于测试。

现在,Repository Pattern 越来越流行,我觉得它是为了满足同样的需求,虽然在实现细节上,你通常使用接口,所以 IBlogProvider,你会通过构造函数而不是属性注入不同的实现,但本质上我没有看不出这两种模式给我们带来的差异。

就个人而言,我觉得 Provider Model 在实现中对我来说更自然。那么,它们之间是否有区别,或者它们只是不同社区赋予不同名称的同一事物?

我很感激对此的任何评论,谢谢,雷。

0 投票
2 回答
474 浏览

design-patterns - 存储库模式问题 - 在不同存储库中使用存储库是否可以接受?

所以我基本上每个实体都有一个存储库,但是我的模型有一个关系部门,其中实体在模型中没有直接关系。所以我需要做的是查询该间接关系并返回实体集合。在与您实际查询的存储库不同的存储库上初始化和调用查询是否合适?如果没有,最好的解决方案是什么 - 帮助类?

谢谢

0 投票
4 回答
1446 浏览

linq-to-sql - 领域驱动设计 (Linq to SQL) - 如何删除聚合的一部分?

我似乎对整个 DDD\LinqToSql 业务感到有些困惑。我正在使用 POCOS 和 linq to sql 构建一个系统,并且我有聚合根的存储库。因此,例如,如果您有 Order->OrderLine 类,那么您有一个 Order 存储库,但没有 OrderLine,因为 Order 是聚合的根。仓库有删除Order的delete方法,但是如何删除OrderLines呢?您可能会认为您在 Order 上有一个名为 RemoveOrderLine 的方法,该方法从 OrderLines 集合中删除了该行,但它还需要从底层 l2s 表中删除 OrderLine。由于没有 OrderLine 存储库,您应该怎么做?

也许有专门的公共存储库来查询域对象实际用于删除聚合中的内容的根和内部通用存储库?

我很想知道其他人做了什么,因为我不能成为唯一一个为此苦苦挣扎的人....我希望....谢谢

0 投票
4 回答
13559 浏览

c# - C#如何转换表达式> 到表达式>

我之前使用过基于 lamdas 的 C# 表达式,但我没有手工编写它们的经验。给定一个Expression<Func<SomeType, bool>> originalPredicate,我想创建一个Expression<Func<OtherType, bool>> translatedPredicate.

在这种情况下 SomeType 和 OtherType 具有相同的字段,但它们不相关(没有继承并且不基于公共接口)。

背景:我有一个基于 LINQ to SQL 的存储库实现。我将 LINQ to SQL 实体投影到我的模型实体中,以将我的模型保存在 POCO 中。我想将表达式传递给存储库(作为规范的一种形式),但它们应该基于模型实体。但我不能将这些表达式传递给数据上下文,因为它需要基于 LINQ to SQL 实体的表达式。

0 投票
2 回答
2392 浏览

asp.net-mvc - 存储库之间的调用方法 - 存储库模式

我在 ASP.NET MVC 应用程序中使用存储库模式(如https://dotnet.microsoft.com/apps/aspnet/mvc站点中的示例)。我有两个存储库,一个称为 CategoryRepository,另一个称为 ProductRepository。我还使用了两个服务,即 CategoryService 和 ProductService 来验证和调用存储库方法。我需要 ProductService 中的类别列表,返回一个的方法已经在 CategoryRepository 中实现。我的问题是,从 ProductService 调用 CategoryRepository 中存在的 ListCategories 方法的正确方法是什么?我不想在 ProductRepository 中实现另一个 ListCategories 方法(DRY 哲学)。谢谢。

0 投票
1 回答
1594 浏览

.net - 将事务与业务流程和存储库模式一起使用

我有一种情况(我猜这很标准),我需要执行一些业务计算并在数据库中创建一堆记录。如果在任何时候出现任何问题,我需要从数据库中回滚所有内容。显然我需要某种交易。我的问题是我在哪里实现事务支持。这是我的例子

如果对数据库的任何更新失败,我需要将其他更新回滚并退出。我是否只是通过我可以调用的存储库公开一个 Connection 对象

Connection.BeginTransaction()

还是我只是在服务层中进行验证,然后在存储库中调用一种方法来保存所有对象并处理事务?这对我来说似乎不太正确。似乎它会迫使我在数据层中投入大量的业务逻辑。

什么是正确的方法?如果我需要跨越存储库(或者那将是糟糕的设计)怎么办?

0 投票
1 回答
157 浏览

c# - 如何第一次保存需要附加另一个预先存在的实体的实体

我需要将公司实体作为新实体保存到数据库中。为此,我需要将 CompanyType 实体与 Company 实体相关联。如果不这样做,我就无法拯救公司。我是否将新创建的公司附加到上下文,然后将公司类型实体附加到公司,然后保存我的结果?这段代码有效......但感觉不对。

CompanyType 附加到另一个上下文并分离,这就是它在此处传递的原因。传递 CompanyTypeID 并在同一 using 语句中查询关联对象会更好吗?

我无法忍受我必须采取这么多步骤才能让 EF goign LINQ to SQL 如此简单!仍然 - EF 似乎比 NHibernate 更容易!

0 投票
2 回答
15460 浏览

c# - 实体框架通用存储库错误

我正在尝试为我的实体框架存储库创建一个非常通用的泛型存储库,该存储库具有基本的 CRUD 语句并使用接口。我先撞到了砖墙头,然后被撞倒了。这是我的代码,在控制台应用程序中编写,使用实体框架模型,带有一个名为 Hurl 的表。只是试图通过其 ID 拉回对象。这是完整的应用程序代码。

这是我得到的错误:

这是我试图从中提取此信息的地方。

http://blog.keithpatton.com/2008/05/29/Polymorphic+Repository+For+ADONet+Entity+Framework.aspx

0 投票
4 回答
4874 浏览

c# - 在 c# 和 WCF 中具有存储库模式的 web 服务?

任何人都可以确认将存储库模式与 web 服务集成的最佳方法......实际上我的存储库模式现在在 c# 中工作。我有 3 个项目,DataAccess、Services 和我的表示层。

问题是我的表示层有很多东西......我有一个 ASP.NET MVC 站点,我有一个 WPF 应用程序,我们即将创建另一个站点 + 外部公司也需要访问我们的存储库。

目前我刚刚添加了服务层作为对每个站点的引用...但是通过 Web 服务提供数据访问的正常方式不是吗?(WCF) - 如果是这种情况,这会破坏服务层吗?还是我应该将服务层转换为 Web 服务?

有谁知道这个速度的优点和缺点是什么?

0 投票
3 回答
1715 浏览

c# - 具有 2 个服务和 2 个数据访问层的存储库模式 - C# DDD?

谁能帮忙,我有 2 个应用程序,它们几乎相同。它们具有完全不同的表示层(Web),业务逻辑和数据库几乎相同。基本上,一个应用程序有一些其他应用程序没有的东西。

所以我想知道我是否可以在不违反任何规则等的情况下执行以下操作

每个应用程序都有自己的表示层。
每个应用程序都有自己的服务层。
每个应用程序都有自己的数据访问层。
每个应用程序共享另一个服务层。

因此,两个应用程序都可以访问共享服务层,因为业务逻辑是相同的,但它们都有另一个服务层,其中有 5 或 6 个特定于该实际应用程序的方法

数据访问层-无论如何我都看不到共享它,因为实体框架有2个不同的数据库,因此它在那里有EDM,因此它不是动态的-并且表格略有不同。

我想我可以在共享数据访问层上使用 IOC

任何人都可以帮助或评论天气,这是一个很好的做法。我不想做的是只有一个单独的服务层,而其中很多是共享的。

这是一个好主意吗?也许我错了,有更好的方法吗?