问题标签 [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.
language-agnostic - 您对存储库模式的理解是什么?
我正在赶上几个月前完成的一个项目的技术文档,而我即将完成的一个项目。我使用存储库来抽象出两者中的数据访问层,并在工作中在我们的 wiki 上编写模式的简短摘要。
正是在写这篇总结的时候,我意识到我第二次采取了一种稍微不同的方法。
一种方法是使用InsertOnSubmit
与工作单元相结合的显式方法,并使用 UoW 跟踪更改进行隐式更新。另一个有一种Save
插入新条目并更新现有条目的方法(没有 UoW)。
您通常倾向于哪种方法?考虑通常的 CRUD 场景,每个场景的责任应该在哪里?
design-patterns - 使用Repository模式,Parent和Child对象最好一起保存还是分开保存?
拥有一个父对象 Employee 和一个 Address 子对象列表:
和一个存储库方法:
此存储库中的代码应该尝试保存父 Employee 以及子 Address 对象,还是应该单独的存储库处理父对象和子对象?
如果是单独的存储库,那么当在客户端代码中保存 Employee 对象及其子对象时,这应该是该级别的单独调用,结合某种服务还是有其他选择?
repository - 存储库模式和业务逻辑
我有一个CustomerRepository
从数据层检索数据的存储库 ()。大多数业务逻辑位于Customer
存储库接受或返回的实体类 ( ) 中。
但是,您将全局实体业务逻辑(适用于所有客户)放在哪里?
例如,我可能不想将所有客户返回给某些用户。我不想将该逻辑放在存储库中。
asp.net-mvc - 我可以在存储库模型中使用它吗?
我正在使用 ASP.NET MVC 和存储库模型开发一个项目。我有存储库类和使用这些存储库类的服务。我的问题是:从我的存储库类返回 IQueryable 然后在服务中使用“.Where”和“.OrderBy”生成列表是否正确?如果是,这是最佳做法吗?
谢谢!
asp.net - 我需要对 MVC 架构和三层架构进行一些说明
我一直在阅读 Pro ASP NET MVC Framework 这本书,我对很多事情感到非常困惑。我一直在尝试做一些研究,但我发现有这么多不同的方法和概念被扔给我,这只会让事情变得更糟。
所以我有几个问题:
我知道 MVC 应该将功能分为三个主要部分:模型 -> 控制器 -> 视图。MVC 是不是与三层架构不同的方法?还是我仍然应该考虑在我的项目中创建数据访问层和业务逻辑层?
存储库到底是什么?它是什么充当我的数据访问层?存储库在哪里/如何适合 MVC?
这本书讨论了使用 LINQ to SQL 与数据库进行交互,但它指出未来将不支持 LINQ to SQL,并且微软正在将其用于实体框架。实体框架在哪里适合 MVC,我如何与之交互?
在此先感谢您的帮助!
马特
linq-to-sql - 如何在不将 IQueryable 暴露给我的应用程序的其余部分的情况下编写一个干净的存储库?
所以,我已经阅读了关于 SO 的所有问答,关于是否将 IQueryable 暴露给你的项目的其余部分(见这里和这里),我最终决定我不想要将 IQueryable 暴露给除我的模型之外的任何东西。因为 IQueryable 与某些持久性实现相关联,所以我不喜欢将自己锁定在其中的想法。同样,我不确定我对调用链下游的类修改不在存储库中的实际查询的感觉有多好。
那么,是否有人对如何在不这样做的情况下编写干净简洁的存储库有任何建议?我看到的一个问题是,我的存储库会因为我需要过滤查询的各种方法而爆炸。
拥有一堆:
如果我允许传递 IQueryable,我可以轻松地拥有一个看起来像这样的通用存储库:
但是,如果您不使用 IQueryable,则 GetAll() 之类的方法实际上并不实用,因为延迟评估将不会发生。我不想返回 10,000 条记录,以后只使用其中的 10 条。
这里的答案是什么?在Conery 的 MVC Storefront中,他创建了另一个称为“服务”层的层,该层从存储库接收 IQueryable 结果并负责应用各种过滤器。
这是我应该做的,还是类似的事情?让我的存储库返回 IQueryable,但通过将其隐藏在一堆过滤器类(如 GetProductByName)后面来限制对它的访问,这些过滤器类将返回像 IList 或 IEnumerable 这样的具体类型?
asp.net-mvc - LINQ to Entities 中如何处理外键和 Guid?
仅以此为例...
以下是我的 UserProfile 表中的列:
ProfileID (主键)
UserID (外键)
地址电话
号码
现在,当我想使用 LINQ to Entities 将新用户添加到数据库时,我正在执行以下操作:
几个问题...
处理我需要知道的外键是否有什么特别之处,或者我可以像处理地址或电话号码一样分配它吗?
UserId 是一个 Guid,我需要从当前用户的 UserId 中检索它。我似乎无法访问 Membership 类或 User 类(这是一个 C# 库,所以我猜它需要以某种方式引用,但我的项目已经在引用我的库,所以我无法引用回来,否则我会有循环依赖)
我不太明白如何处理Guids。实施时
getProfileByUserName(string userName)
,这是我的问题...
首先我无法检索用户ID,这是我尝试过的:
但它说由于某种原因我不能将它转换为 Guid。
如果您能对这些问题中的任何一个提供任何见解,我将不胜感激!
谢谢,
马特
asp.net-mvc - 针对我的 MVC 存储库进行测试的最佳方法是什么?
我已经建立了一个存储库,我想在它上面运行一堆测试,看看函数返回什么。
我正在使用 Visual Studio 2008,我想知道是否有任何沙箱可以玩(无论是否在 Visual Studio 2008 中),或者我是否真的必须构建一个模拟控制器并查看来测试存储库?
谢谢,
马特
c# - LINQ、存储库模式和数据库抽象
我现在花了一些时间来解决一个到目前为止我还没有解决方案的问题。我有一个预定义的非常庞大的数据库,其结构是固定的。我使用存储库模式在服务代码和数据库逻辑之间创建一个抽象层。问题是,我需要对数据库对象进行一些处理,然后再将它们传递出存储库。因此我不能直接使用 Linq 实体。
基本上,存储库方法如下所示:
到目前为止,这工作得很好。但是我有很多应该单独组合的对象。FindBookingcode() 应该返回一个几乎完整的对象以及目录等其他对象。我现在的问题是我必须多次重写映射,就像在这个例子中一样:
我还在存储库中进行了一些 L2O 处理,用于组装返回的对象。另一件事我没有很酷的解决方案,是一种告诉存储库它应该获取什么的方法,例如 FindBookingcode(id, includePackageInfo, includeCatalog)。
所以这里有问题:
1)这种方法完全愚蠢吗?
2)你能指导我找到一个使重新映射更简单的解决方案吗?
3)如何实现DDD的标准机制
c# - 您将如何编写类似于“工厂”设计模式的存储库模式?
我想我会重写这个问题(相同的迭代)。最初是如何围绕 EAV/CR 数据库包装存储库模式。我正在尝试一种不同的方法。
问题:您如何以“工厂”设计模式的方式编写数据存储库? 我有固定数量的实体,但这些实体的属性是相当客户特定的。他们宣传的产品都相似,但每个客户根据他们的商业模式附加不同的信息。例如,有些人关心浪费的百分比,而另一些人关心所售出的磅数。每次我们找到另一个客户时,我们都会添加一堆字段,删除一堆字段,然后花费数小时将每个解决方案与最新的通用版本保持同步。
我认为我们可以将存储库类放在工厂模式中,这样当我知道客户类型时,我就知道他们将使用哪些字段。实际的?更好的方法?Web 表单使用经过修改以反映布局上的字段的用户控件。我们目前将布局上的字段“连接”到产品表中的字段,然后是 CRUD 通用字段。
上一题内容:
我们有一个 EAV/CR 数据模型,它允许同一实体使用不同的类。这会跟踪客户拥有截然不同的产品的产品。客户可以定义产品的“类”,用字段加载它,然后用数据填充它。例如,
Product.Text_Fields.Name
Product.Text_Fields.VitaminEContent
关于如何围绕此包装存储库模式的任何建议?
我们有一个三表 EAV:一个产品表、一个值表和一个列出字段名称和数据类型的元表(我们列出数据类型是因为我们还有其他表,例如 Product.Price 和 Product.Price 元数据)与其他产品,如 Product.Photo。)客户跟踪各种价格,如竞争对手的百分比折扣差异以及即时计算。
我们目前在 C# 中使用 Linq to SQL。
编辑:
我喜欢下面的“动态查询”Linq。我们的数据库背后的想法就像更衣室更衣室存储。每个运动员(或客户)按照他们希望的方式组织他们自己的储物柜,我们会为他们处理存储。我们不在乎储物柜里有什么,只要他们能用它做他们需要的事情。
非常有趣...传递给存储库的对象可能是动态的?这几乎是有道理的,几乎就像工厂模式。客户是否可以将他们自己的类定义放在一个文本文件中,然后我们继承它们并将它们存储在数据库中?