问题标签 [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 - 使用带有规范模式的急切加载
我已经使用 Linq 实现了规范模式,如此处所述https://www.packtpub.com/article/nhibernate-3-using-linq-specifications-data-access-layer
我现在想添加急切加载的能力,但不确定最好的方法。
链接示例中的通用存储库类:
以及规范实现:
这工作得很好,我现在想添加能够急切加载的能力。我了解 NHibernate 急切加载可以通过在查询上使用Fetch来完成。
我正在寻找的是是否将预先加载的逻辑封装在规范中或将其传递到存储库中,以及实现这一点所需的 Linq/表达式树语法(即如何完成的示例)。
domain-driven-design - 单独项目中的规范模式?
我打算使用“规范模式”来验证我的解决方案中的域对象。
在我的解决方案中放置“规范”类的“正确”位置在哪里?我应该创建一个包含“规范”类的专用项目,还是应该将它们放入域或业务项目层?
c# - 规范模式毫无意义吗?
我只是想知道规范模式是否毫无意义,给出以下示例:
假设您想检查客户在他/她的帐户中是否有足够的余额,您将创建如下规范:
但是,我想知道的是,我可以通过在 Customer 类中使用 Property getter 来实现与规范模式相同的“好处”(例如只需要就地更改业务规则),如下所示:
从客户端代码:
所以我的问题真的是;使用属性 getter 包装业务逻辑和创建规范类有什么区别?
谢谢大家!
linq - 向典型的 Linq 规范模式添加分页和过滤?
我有一个大量使用网格的 ASP.NET MVC2 应用程序。我想看看是否有一种方法可以将有效的分页和过滤添加到典型的规范模式中。
基本上,启动它的调用如下所示:
现在,我知道我可以在下面做这样的事情,并根据网格的分页和过滤设置获取行的子集:
但是,所有过滤都发生在中间层,通过 userId 完全拉取所有记录,随着时间的推移,每个用户可以增长到数百条记录。这意味着许多低效的网络聊天。因此,很明显,需要降低标准,以便 NHibernate 和 Linq 生成的 SQL 过滤得更好。
LinqRepository 代码基本上是:
例如,PatientByUserIdSpecification 具有 MatchingCriteria:
我在想有下面的就可以了,但是查询仍然太宽泛了。
我可以以及如何设置生成更好 SQL 的能力吗?
design-patterns - 如何用复合规范模式实现 isGeneralizationOf?
根据 Fowler 和 Evans的规范文档,我正在尝试实现复合规范模式。
第一印象,我认为isGeneralizationOf
联合和析取的实现会有所不同。
特别是,我认为合取的逻辑是
(1) 令 specX 为 specA 和 specB 的合取。那么,只有当 specA 和 specB 都是 specC 的泛化时,specX 才是 specC 的泛化。
我认为析取的逻辑是
(2) 令specY 为specA 和specB 的析取。然后,如果 specA 或 specB 是 specC 的泛化,则 specY 是 specC 的泛化。
但是,在文档的第 16 页,他们展示了这种方法:
我在(1)和(2)中的推理是否正确?如果错了,那是为什么呢?如果它是正确的,那么作者为什么要定义一个方法来同时被合取和析取规范继承呢?他们在这里的意图是什么?
sql - 使用没有 ORM 的 SQL 的规范模式,具有存储库模式
我一直在研究 martin fowler 在存储库模式部分的企业架构模式中简要描述的规范模式,以及 Web 上的几个示例。但是,几乎所有示例/描述都是通过使用 ORM 和 IsSatisfiedBy 等方法创建的,这些方法由规范对象执行(并且可能由 ORM 转换为 SQL)。
我可以看到您如何调整它以使用 SQL,但由于普遍缺乏 SQL 示例,我想知道人们是否正在将此模式与 SQL 数据访问层和存储库模式一起使用,以及他们的经验/方法如果有的话,或者任何可能更适合该任务的替代方案(如果有的话)。
c# - 持续规范
我正在构建一个系统,用户可以在其中订阅项目并定期收到新项目的通知。用户应该通过过滤某些属性来定义他们想要的项目。
我正在使用规范模式来过滤项目。我的想法是用户应该在 web gui 中定义自己的规范。
过滤很简单:
问题是,坚持每个用户不同规格的最佳方式是什么?我对如何坚持它没有任何要求。关系数据库、文档数据库、xml 等等。
我能想到:
编写外部 DSL(并将其存储在 rdb 中的简单列中)
为规范中的每个属性存储一行(在 rdb 中),指示要过滤的内容和修饰符(等于,大于)。这将导致很多行。
为每个规范创建一个新表(不知道这是否现实)
似乎 DSL 选项是最干净的解决方案(我只需要编写一个DSLSpecification
需要 dsl 并将其传递给我的 Itemservice 的方法。也许我把事情复杂化了。
c# - 规范模式与扩展方法?
我正在尝试掌握规范模式,但我对此感到有些困惑。我真的找不到它对我的特定要求有帮助。我想知道如果我更喜欢复杂规范的扩展方法有什么问题?例如
我发现用扩展方法而不是使用规范模式来包装我的长规范很有帮助。这有什么问题?
entity-framework-4.1 - 使用规范模式作为验证层?
我只看到了用于检索数据的规范模式,但没有看到验证它。一位同事建议我可以使用规范模式来“验证”一个对象,这样在保存更改时它就不会变得无效。
例如,假设我们有一个具有 Address 值的根 Customer 对象。我们可以跟踪对象的更改并创建一个可以发送到工作单元的规范,以确保在保存更改之前地址是有效的(具有物理地址、城市和州)。
对此有什么想法吗?
c# - mvvm 存储库过滤
我有一些主要基于 Josh Smith 的msdn 文章的主从课程。它的代码很棒,尤其是作为示例,但让我想知道如何最好地处理需要存储库的某个子集的情况。
所以 Josh 有一个名为 AllCustomersViewModel 的类,代码如下:
您如何解决需要 PreferredCustomers、ExCustomers、LocalCustomers 等的情况?
他的代码向我建议了每个 ViewModel 类,并在该类中硬编码存储库的过滤。
还是一种将可选过滤器与存储库一起传递到 ViewModel 的方法?
您的代码如何解决这个特定问题?
顺便说一句,有没有人有链接或很好的例子来展示如何使用 SpeciaficationPattern 或 IQueryable 来解决这样的问题?
干杯,
贝里尔