问题标签 [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.
complexity-theory - 使用规范模式真的可以降低代码的复杂性吗?
从我的阅读来看,规范模式似乎可以大大减少过滤数据所需的方法数量。您看到使用规范模式有什么好处?您是否注意到了不可预见的好处。相反,你遇到了什么陷阱?
.net - 实现使用规范来确定要创建的对象类型的工厂
这主要是一个思想实验。所以这一切都是示例代码。我的目标是使用规范模式来消除工厂内大量的条件代码。因此,对于这个示例,我有一个 StatusData 对象,我想获得一个适合它的 IStatusUpdate 实现。
我有以下一组测试:
到目前为止,我的工厂实现如下所示:
一旦我发现了状态对象满足的规范,我就会失败,我如何将该规范映射到实现 IStatusUpdate 的类型。我很难过。
有人正确地建议我需要将规范映射到 IStatusUpdate 实现者。这种映射似乎是工厂的责任,把它挂在规范之外闻起来像是违反了 SRP。我可以创建一个具有该职责的 Mapper 类,但这似乎不是很通用,并且还提出了如何将映射器映射到规范的问题。
我在这里仍然缺少一个小飞跃。
nhibernate - 使用 NHibernate 查询数据库的规范模式
你如何实现使用 NHibernate 查询数据库的规范模式?(没有 LINQ to NHibernate)。我阅读了很多关于规范模式的内容,但其中大部分是关于验证和查询内存集合对象的。
据我所知,在这样的规范接口中使用 DetachedCriteria 的最佳方法。
有没有替代或更好的方法来做到这一点?
linq-to-sql - 域中定义的规范模式
使用 Linq to SQL 和具有解耦存储库的 DDD 样式域层,是否有人对如何实现规范模式而不会将 L2S 问题渗透到域层有任何好的想法,这仍然可以理解吗?:)
我们围绕一组交易数据的选择有复杂的业务逻辑,并且希望这些规则/规范归域所有。我们在保持我们的域持久性无知方面也做得很好。
这带来了一个问题,因为为了实现规范,域(据我所知)需要查看正在查询的类型(L2S 类型)。
有任何想法吗?
此外,由于我不想解释的原因,nHibernate 是不可能的.. :)
linq - 当您可以使用动态 LINQ 时,规范模式是否已过时?
维基百科指出,规范模式是可以通过使用布尔逻辑将业务逻辑链接在一起来重新组合业务逻辑的地方。关于从列表或集合中选择过滤对象,在我看来 Dynamic LINQ 允许我完成同样的事情。我错过了什么吗?规范模式是否还有其他需要考虑的好处?
编辑:
我发现了一些讨论结合 LINQ 和规范模式的帖子:
Nicloas Blumhardt (Autofac dude) 通过 Linq 实现规范模式
有没有人走过这条路并且维护变得复杂?
php - 允许转换为 sql 的 PHP 规范模式
我正在尝试找出在 PHP 中使用规范模式的最佳方法,其中规范可以(可选地)转换为 PHP。
我正在探索一些新的方向,并测试它们的工作情况。代码和想法在我的脑海中仍然很不清楚。
最小的接口是这样的:
如果存储库隐藏了 sql 数据库,则规范需要转换为 sql。添加 ->toSQL() 方法似乎是临时的。转换规范的类也是一种选择,但最终生成 sql 似乎需要很多开销。
想法赞赏。
sql - 规范模式与特定的休眠查询
我的问题是何时使用规范模式,何时使用特定的 SQL 查询。
我知道特定模式需要使用具体规范收集整个集合和后过滤器。但是我不明白具体SQL查询前面的优势。
在 SQL / Hibernate 中也是如此
我认为这取决于要处理的数据量。
c# - 存储库和规范模式
我目前正在建立一个新项目,并且遇到了一些事情,我需要一些输入。
这就是我正在考虑的:
我想要一个通用存储库
我不想从我的存储库中返回 IQueryable。
我想将我的查询封装在规范中。
我已经实现了规范模式
它需要易于测试
现在这是我有点卡住的地方,我的问题是哪种方式是使用一个或多个规范调用 find 方法的最优雅方式:
(流利):bannerRepository.Find().IsAvailableForFrontend().IsSmallMediaBanner()
或用我的规范将查询表达为 lambdas
(拉姆达):bannerRepository.Find.Where(banner => banner.IsFrontendCampaignBanner && banner.IsSmallMediaBanner)
或者可能是完全不同的方式?最重要的是,实现 MVC 前端的人应该对存储库有良好的直观体验。
我希望实现的是在能够组合规范方面保持一定的灵活性,并提供与规范“过滤”的体验,但不会将 IQueryable 泄漏给控制器,但更像是 ISpecifiable,它只允许用规范而不是 Linq 修改查询。但是我只是回到以这种方式将查询逻辑泄漏给控制器吗?
domain-driven-design - 如何调整规范模式来评估对象的组合?
我知道规范模式描述了如何使用实现的类层次结构ISpecification<T>
来评估类型 T 的候选对象是否匹配某个规范(= 满足业务规则)。
我的问题:我要实现的业务规则需要评估几个对象(例如,客户和合同)。
我的双重问题:
规范模式是否有典型的适应来实现这一点?我只能考虑删除
ISpecification<T>
我的规范类的实现,并在方法中获取尽可能多的参数isSatisfiedBy()
。但是这样做,我失去了将这个规范与其他规范结合起来的能力。这个问题是否揭示了我的设计中的缺陷?(即我需要使用客户评估什么,而合同应该在另一个对象上评估,比如订阅,它可能包含所有必要的信息)?