问题标签 [specification-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.
linq - 如何创建表达式集合>?
我有一个使用以下方法的存储库:
我需要传递多个表达式。我正在考虑将签名更改为:
- 这可能吗?
- 例如,如何创建一个表达式数组以传递给此方法?
目前我正在从我的服务层调用该方法,如下所示:
但我想通过p => p.Variants
,p => p.Reviews
例如。然后在存储库中,我想遍历表达式并将它们添加到查询中。
有关我为什么这样做的一些背景信息,请参阅 Ben Foster 的博客文章Eager loading with NHibernate。
c# - 动态表达式 API:我可以做一个谓词,如何编写 OrderBy 规范?
我想出了如何从基于Dynamic Linq的客户端提供的字符串中执行谓词(这包含在 Specification 对象中):
其中 filter 是其帮助文件中描述的表达式语言字符串。奇迹般有效。
但是,是否可以将 orderby 字段的字符串列表转换为强类型表达式,如下所示:
笔记:
这是我过滤和订购商品的存储库方法
我想使用以下方法调用它:
关于如何将 OrderBy 字段的字符串列表转换为强类型 lambda 表达式的任何想法?字符串的示例是:
另一个注意事项:
我正在翻译来自客户端的字符串,这些字符串正在使用正则fieldname op value
表达式验证它们以防止注入。另外,我只在 Specification 对象中引用 Dynamic Linq,而不是存储库。
c# - 实体框架 - 关于业务层需求的意见
目前我的网站有一个存储库模式,其中包含规范模式。只需几行代码,我就可以从我的 .aspx 页面中获取数据,例如:
现在我的问题是,我的网站是否需要业务层?如果您的回答是肯定的,为什么?目前看来,由于规范模式,我不需要页面和存储库之间的业务层。
感谢您的意见。
c# - 需要帮助理解规范模式 - 继承
我相信这更像是一个继承问题,但是由于我试图通过实现使用它的模式来更好地掌握它,我想我会问我的相关问题以便更好地掌握。
如果您使用规范模式,有许多规范都派生自规范,并用包装规范类包装它们:
例子 :
我的问题是:既然您将客户实体传递给 acceptCustCreditStatusSpec 的 IsSatisfiedBy 方法(第一个假设),那么客户实体如何传递给 unlimitedCreditLimitSpec 和 SufficientCustCreditAmtSpec 规范的 IsSatisifedBy 方法?
谢谢,
entity-framework-4 - 使用带有 EF4 的存储库模式加入集合时遇到困难
我很难让这个背后的设计正确。我正在使用存储库模式来管理我的数据层。在我的一个控制器(MVC3)中,我正在构建一个需要执行连接的 LINQ 查询。我对此有两个问题:
- 向我的存储库添加一个方法来执行所有连接、投影等更好吗?我对此有点犹豫,因为这会导致我的存储库上的合同定义不断增长?
- 假设我在返回所有项目的 Post 存储库中有一个 List() 方法。我目前无法在 linq (join) 查询中使用此方法,因为它无法将其转换为存储表达式。请注意,下面的代码使用了一个名为 repo 的类,它使用相同的上下文实例保存对我所有存储库(帖子、朋友)的引用。
大编辑: 现在对我来说事情有点清楚了,但我希望有人会跳到这里来帮助我把一切整理好;-)。我要做的是实现一个规范模式以及我的存储库模式。问题是,我正在使用 POCO,而我的存储库正在使用使用 IObjectSets 的 IContext 接口。因此,在下面的列表方法中,Posts 是一个 IObjectSet,Context 是一个 IContext 接口,我将实际上下文注入其中。
我一直在阅读并且有一些非常好的即用型代码,例如 implementation-repository-pattern-with-ef4-poco-support和implementation-repository-pattern-with-entity-framework。
这两个示例都使用存储库中的 objectContext。把它抽象出来不是更好吗?
我的存储库:
在我的控制器方法中:
但是,以下确实有效(为什么?):
它与此处描述的问题基本相同:linq-to-entities-does-not-recognize-the-method
我该如何围绕这个设计?我一直在阅读模型定义的函数,但我不确定这是否可行?
提前致谢
c# - 在规范中组合 C# 代码和数据库代码
有时您需要定义一些业务规则,而规范模式是一个有用的工具。例如:
但是,我经常发现我需要将这些规则“推送”到 SQL 中以提高性能或满足分页记录列表之类的需求。
然后我不得不为规则编写两次代码,一次用 CLR 代码,一次用 SQL(或 ORM 语言)。
你如何组织这样的代码?
最好将代码放在同一个类中。这样,如果开发人员正在更新业务规则,他们忘记更新两组代码的机会就会减少。例如:
然而,这对我来说似乎很丑陋,因为我们现在将关注点混合在一起。
另一种选择是使用 Linq-To-YourORM 解决方案,因为 LINQ 代码可以针对集合运行,也可以转换为 SQL。但我发现,除了最琐碎的场景之外,这种解决方案几乎不可能出现。
你做什么工作?
.net - LINQ to Entities 无法识别该方法
尝试执行 linq 查询时出现以下错误:
LINQ to Entities 无法识别“Boolean IsCharityMatching(System.String, System.String)”方法,并且该方法无法转换为存储表达式。
我读过很多以前的问题,人们会遇到同样的错误,如果我理解正确,那是因为 LINQ to Entities 需要将整个 linq 查询表达式转换为服务器查询,因此您不能调用外部方法在里面。我还没有能够将我的场景转换成可行的东西,而且我的大脑开始崩溃,所以我希望有人能指出我正确的方向。我们正在使用实体框架和规范模式(我对这两者都很陌生)。
这是使用规范的代码:
这是 linq 表达式:
这是 IsCharityMatching 方法:
如果您需要更多信息,请告诉我。
非常感谢,
安妮莉
linq - Linq:运算符不理解表达式类型谓词的查询语法
我已将规范定义为如下类型的对象Expression<Func<User, bool>>
:
这对于用扩展方法语法编写的查询非常有效:
但不是使用 Linq 查询语法:
编译器给了我cannot implicitly convert type 'Expression<Func<User, bool>>' to 'bool'
.
是什么赋予了?我认为 Linq 查询语法只是一个可爱的 DSL 修饰扩展方法语法。谁能告诉我如何将我可爱的规范与 Linq 查询语法一起使用?
c# - Linq:如何对关联对象使用规范
我以这种形式使用规范:
现在我可以使用以下形式的规范:
但我不确定如何对这样的关联对象使用规范:
有没有办法做到这一点,还是我需要重新考虑我的规范实施?
domain-driven-design - 规范模式对象应该在哪一层“新建”?
所以,我在这里查看了一些关于规范模式的帖子,但还没有找到答案。
我的问题是,在 n 层架构中,规范究竟应该在哪里“更新”?
我可以将它们放在我的服务层(又名,有时称为应用程序层......基本上,一个 .aspx 代码隐藏会与之交谈的东西),但我觉得这样做,我让业务规则泄露出去域。如果通过其他方式访问域对象(除了服务层),域对象就不能强制执行它们自己的业务规则。
我可以通过构造函数注入将规范注入我的模型类。但同样,这感觉是“错误的”。我觉得应该注入模型类的唯一东西是“服务”,如缓存、日志记录、脏标志跟踪等......如果你能避免它,使用 Aspects 而不是乱扔模型的构造函数具有大量服务接口的类。
我可以通过方法注入(有时称为“双重调度”???)注入规范,并明确地让该方法封装注入的规范以强制执行其业务规则。
创建一个“域服务”类,它将通过构造函数注入获取规范,然后让服务层使用域服务来协调域对象。这对我来说似乎没问题,因为规范强制执行的规则仍然在“域”中,并且域服务类的命名非常类似于它正在协调的域对象。这里的事情是我觉得我正在编写很多类和代码,只是为了“正确”实现规范模式。
除此之外,有问题的规范需要一个存储库才能确定它是否“满意”。
这可能会导致性能问题,尤其是。如果我使用构造函数注入 b/c 消费代码可以调用一个可能包装规范的属性,而这反过来又调用了数据库。
那么有什么想法/想法/文章链接吗?
新建和使用规范的最佳地点在哪里?