问题标签 [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 回答
4385 浏览

c# - 使用存储库模式与实体框架一起使用的自动映射器?

一直忙于创建一个新应用程序,基本上我有我的数据访问、服务层和表示层......一切都很好,但我正在使用 EF 返回的实体类。这里的问题是我将这些传递到表示层,所以我需要将实体框架引用 /dataccess 添加到表示层 - 不好:

所以我的想法如下,并且正在寻找一些帮助和确认我正在走正确的路线......

  1. 在服务层中创建一组类,如客户、订单等,因为表示层有对服务层的引用。

  2. 当在数据访问中返回客户实体时,我会将实体类(即客户)返回给服务,我会在这里进行映射 - 不太确定我是否喜欢这个?

  3. 我用于映射的这些“标准类”的最佳位置在哪里,如果我将它们放在服务层并映射数据访问,那么这将创建一个循环引用作为数据访问>服务和服务>数据访问.. - 它应该只是一种方式,即服务 > 数据访问

我正在考虑使用 Automapper ( http://www.codeplex.com/AutoMapper ) 来解决这个问题,我在正确的路线上吗???任何想法或例子都非常感谢..

正如我所说,唯一的是当我从数据访问返回到服务层(使用 Iqueryable)时,我需要将这些从实体类中映射出来并使用标准集合类。

我认为这是我感到困惑的地方,我确实觉得使用实体类不好,因为这意味着我需要在我的表示层中引用实体框架/数据访问才能访问实体类..

0 投票
5 回答
6313 浏览

data-structures - 存储库模式与“智能”业务对象

在 .NET(Winforms、WPF、ASP.NET)上创建更大规模的企业级应用程序时,我看到了两个主要的“思想流派”。

有些人使用“存储库模式”,它使用知道如何获取、插入、更新和删除对象的存储库。这些对象相当“愚蠢”,因为它们不一定包含大量逻辑——例如,它们或多或少是数据传输对象。

另一个阵营使用我所谓的“智能”业务对象,它们知道如何加载自己,它们通常有一个 Save()、可能是 Update() 甚至是 Delete() 方法。在这里,您真的不需要任何存储库 - 对象本身知道如何加载和保存自己。

大问题是:您使用或喜欢哪个?为什么?

您是否在所有应用程序中使用相同的方法,或者您是否有任何特定标准何时选择一种方法而不是另一种?如果是这样 - 这些标准是什么?

我并不是想在这里发起一场激烈的战争——只是想了解每个人对此的看法以及您的意见,以及为什么您使用一种(或两种)模式而不是另一种模式。

感谢您的任何建设性意见!

0 投票
2 回答
1939 浏览

database - 存储库中的异常:您如何处理它们?

一个简单的,我有兴趣了解您的想法:

使用您的存储库实现,您喜欢让异常在存储库中引发并将异常处理留给调用者,还是您更喜欢在存储库中捕获异常、存储异常并返回 false/null?

0 投票
2 回答
7130 浏览

c# - 如何使用接口、基础和具体实现存储库模式

IRepository<T>通过拥有一个接口、一个NewsRepository类和一个News实体,我几乎已经完成了我的存储库模式的实现。我遇到的问题是试图将常用方法抽象为基础 Repository 类。

我找不到一种方法来抽象 Get 方法,NewsRepository因为它包含特定的 Linq 表达式。

我的问题是

1)请问如何将public T Get(int id)方法抽象为基类?到目前为止,我完成它的唯一方法是传入Expression<Func<T,bool>>而不是 int,但是这并没有真正抽象出常见的行为,因为每个子类仍然需要传入一个在每种情况下几乎相同的表达式,即n => n.id == id.

2)如何将子类 GetViolations 和 map 方法传递到 Update 方法的基类中?我想解决方案可能是使用委托,但我无法获得编译的语法

这是一组简化的代码——实际上我有一个 Save 方法,它执行 Update 和 Insert 而不仅仅是这里显示的 Update。

0 投票
3 回答
1895 浏览

model-view-controller - 我的 MVC 存储库模式和 StructureMap 的问题

我有一个在 ado.net 实体框架之上创建的存储库模式。当我尝试实现 StructureMap 来解耦我的对象时,我不断收到 StackOverflowException(无限循环?)。这是模式的样子:

IEntityRepository where TEntity : class 定义基本的 CRUD 成员

MyEntityRepository : IEntityRepository 实现 CRUD 成员

IEntityService where TEntity : class 定义为每个成员返回公共类型的 CRUD 成员。

MyEntityService : IEntityService 使用存储库检索数据并返回一个通用类型作为结果(IList、bool 等)

问题似乎与我的服务层有关。更具体地说是构造函数。

从控制器中,我传递了一个实现 IValidationDictionary 的对象。我明确地调用第二个构造函数来初始化存储库。

这是控制器构造函数的样子(第一个创建验证对象的实例):

如果我不传递我的 IValidationDictionary 对象引用,一切正常,在这种情况下,第一个控制器构造函数将被删除,并且服务对象将只有一个接受存储库接口作为参数的构造函数。

感谢您对此的任何帮助:) 谢谢。

0 投票
2 回答
175 浏览

visual-studio - 使用 nHibernate,如何在 VS.NET 解决方案中布置文件?

使用 nHibernate(和存储库模式),您如何布置文件/文件夹?

我将使用 DDD,并使用存储库模式,因此我将拥有许多映射到我的数据库表的类,以及许多从接口继承的存储库等。

就像是:

0 投票
7 回答
3633 浏览

c# - TDD - 想用一个假的存储库测试我的服务层,但是怎么做?

我设计了一个使用存储库模式的应用程序,然后是一个单独的服务层,例如:

如您所见,我在 Register 方法中实例化了我的存储库。现在,当我想编写一些单元测试时,我无法真正使用它并将其替换为假存储库,可以吗?

我不想将存储库添加为类变量(并通过构造函数设置它),因为我认为这会使我的代码“臭”(并非所有方法都需要所有存储库,而且我不需要调用层以了解存储库等)。

建议?

0 投票
4 回答
1542 浏览

c# - 返回的存储库模式和数据类型

我正在使用存储库模式并且想知道我应该返回什么数据类型。在我的数据库中,我有一个可变长度的字符串,需要根据固定长度进行分解。我最初考虑传递字符串并让服务层根据配置列的长度进行解析。我真的不喜欢从存储库层传递字符串的想法,宁愿传递一个完整的对象。传递字符串似乎没有足够的责任分离,但是让存储库不得不使用另一种方法来获取应该如何解析字符串并且进行解析似乎对于 repo 来说工作量太大。在这种情况下,回购和服务的责任应该是什么?

0 投票
5 回答
2718 浏览

c# - 使用存储库模式时,我应该放置多少逻辑存储库方法?

我在存储库方面有点挣扎。我正在使用 C# 和 NHibernate。我的问题是:我的存储库在调用保存或获取之前应该做多少?

例如,我有一个用户类,它是一个聚合根。我想调用一个名为“register”的方法,它将添加用户并根据业务规则设置一些默认值,并创建一些其他实体,这些实体也是“用户”根目录的子部分(即地址、组等)。我应该打电话吗

这将是(忽略明显的问题):

或者我应该把注册放在业务层并让它这样做:

两者似乎都有些错误。

什么是正确的方法?

编辑 - - - - - - - - - - - - - - - -

感谢所有的回复。我无法决定谁是最正确的,因此无法决定接受哪个答案。

通常每个人都在说将业务规则放在另一层。这是有道理的,但我不确定组的数据调用 - 因为组不是聚合根,所以它们不应该有自己的存储库,所以我该如何添加和保存它们?在我的项目中,将组添加到用户的组集合不会自动在数据库中创建组;我还需要在对象上调用 session.save。那么我是否将其作为 userRepo.SaveGroup(g) 放入用户存储库中?

如果我在另一层有一个 createGroup() 那么它要么需要使用它自己的 repo 要么使用用户。还是我很厚?

0 投票
5 回答
234 浏览

linq-to-sql - 我怎样才能跟上新技术的步伐?

复制:

为新手学习实现设计模式

我多年来一直是一名开发人员,拥有自己的开发方式,并且始终跟上最新的技术。我想开始使用一种设计模式,希望它能提高我的开发速度,但我需要找到一个来应用,我需要找到一个完整的开源示例来演示它。

我使用并拥有一个使用 LINQ to SQL 和 .net 3.5 的应用程序,我尝试应用存储库模式,但发现结构复杂,不得不破解它。

对想要改善编程风格的人有什么建议吗?