问题标签 [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.

0 投票
3 回答
2338 浏览

c# - 带有 EF 4.3 的 LINQ 内部规范

我偶然尝试在 LINQ 查询中使用我的规范。这里的麻烦在于我的参数规范。

让我们伪造一个简单的场景:

我真正想做的事

我知道这有点令人困惑,但我试图避免在我的真实(大)场景中进行大量往返,而且我知道实际上不可能将原始 LINQ 与实体框架一起使用。我厌倦了尝试这么多博客和失败的(我的)方法。有人知道一些真正的好方法。还有另一种方法吗?

错误

System.NotSupportedException:LINQ to Entities 无法识别方法“Boolean IsSatisfiedBy(App.Model.Piece)”方法,并且此方法无法转换为存储表达式。

更新

基本规格模式

更新

如果我这样做很容易整洁

存储库

0 投票
2 回答
792 浏览

c# - 将规范模式序列化到数据库

好的,我们必须计算极其复杂的保险登记数据的资格和费率。可以根据年龄、就业特征、鞋码等制定政策。1962 年之前出生的人可能被排除在外,除非他们住在德克萨斯州并养有贵宾犬等。

所以我们可以构建实现规范模式的类。我们可以嵌套和规范,或规范等。这很棒。但是现在我们如何将它序列化到数据库中呢?

我们可以将我们的 c# 类转储到 xml 并保留它。但这很脆弱,但几乎不可能查询。将类序列化为 xml 并将其转储到大文本字段中具有明显的代码气味。

是否有关于如何将嵌套规范放入数据库的规范答案?我的 Google-fu 让我失望了。

0 投票
2 回答
1309 浏览

asp.net-mvc-3 - 带有存储过程的 DDD 规范模式

我将编写一个存储过程,它将根据查询拉回 X 条记录。该 SP 在进行搜索时可能需要锁定记录。我也在使用我知道不能使用悲观锁定的 EF。

我没有在查询本身中包含过滤逻辑,而是考虑使用规范模式,以便业务逻辑决定查询。如果我使用此模式并将规范传递到我的存储库中,该存储库又调用 SP,SP 如何知道如何处理规范?

规范可以由跨越多个表和在不同列上排序的标准组成。

在这种情况下使用规范模式是否有意义,或者我应该只使用其中定义的查询和过滤来创建 SP?

0 投票
2 回答
202 浏览

entity-framework - NHib 的 EF 存储库实现

下面是设计用于实体框架的通用存储库的实现。忽略这个练习的“好”或“坏”......

NHibernate 中的代码会是什么样子?

干杯,
贝里尔

笔记

这不是关于如何设计存储库或是否使用存储库的问题。只是从 EF 到 NHib 的直接翻译......

0 投票
1 回答
452 浏览

linq - 扩展基于 LINQ 的规范模式以实现包容

复合规范模式有很多基于 LINQ 的实现。我还没有见过使用 Subsumption 的。

是否有任何此类示例已被记录(博客等)或作为开源发布?我有一个想法和概念证明,通过让 ExpressionVisitor 将每个规范转换为规范逻辑形式 (CNF/DNF) 来实现这一点,但我担心这过于复杂。有没有更好的办法?

0 投票
4 回答
25976 浏览

c# - 精心设计的查询命令和/或规范

我一直在寻找一个很好的解决方案来解决典型存储库模式所带来的问题(不断增长的专用查询方法列表等。请参阅:http ://ayende.com/blog/3955/repository-是新的单例)。

我真的很喜欢使用命令查询的想法,特别是通过使用规范模式。但是,我对规范的问题是它只涉及简单选择的标准(基本上是 where 子句),而不涉及查询的其他问题,例如连接、分组、子集选择或投影等。基本上,许多查询必须经过所有额外的循环才能获得正确的数据集。

(注意:我在命令模式中使用术语“命令”,也称为查询对象。我不是在谈论命令/查询分离中的命令,其中查询和命令(更新、删除、插入))

所以我正在寻找封装整个查询的替代方案,但仍然足够灵活,以至于您不只是将意大利面条存储库换成命令类的爆炸式增长。

例如,我使用过 Linqspecs,虽然我发现能够为选择标准分配有意义的名称有一些价值,但这还不够。也许我正在寻找一种结合多种方法的混合解决方案。

我正在寻找其他人可能已经开发的解决方案来解决这个问题,或者解决一个不同的问题,但仍然满足这些要求。在链接的文章中,Ayende 建议直接使用 nHibernate 上下文,但我觉得这在很大程度上使您的业务层复杂化,因为它现在还必须包含查询信息。

等待期结束后,我将为此提供赏金。因此,请让您的解决方案有价值,并提供良好的解释,我将选择最佳解决方案,并为亚军投票。

注意:我正在寻找基于 ORM 的东西。不必明确地是 EF 或 nHibernate,但这些是最常见的并且最适合。如果它可以很容易地适应其他 ORM,那将是一个奖励。Linq 兼容也不错。

更新:我真的很惊讶这里没有很多好的建议。似乎人们要么完全是 CQRS,要么完全属于 Repository 阵营。我的大多数应用程序都不够复杂,不足以保证 CQRS(大多数 CQRS 倡导者很容易说你不应该使用它)。

更新:这里似乎有点混乱。我不是在寻找新的数据访问技术,而是在业务和数据之间设计合理的接口。

理想情况下,我正在寻找的是查询对象、规范模式和存储库之间的某种交叉。正如我上面所说,规范模式只处理 where 子句方面,而不是查询的其他方面,例如连接、子选择等。存储库处理整个查询,但一段时间后就会失控. 查询对象也处理整个查询,但我不想简单地用大量查询对象替换存储库。

0 投票
2 回答
1233 浏览

domain-driven-design - 域驱动设计 - 如何检查域对象中一个属性的唯一性

我正在使用域驱动设计开发应用程序。我一直在使用的模式之一是存储库模式。为了简单起见,假设我有以下类和接口。

Car - 代表汽车领域概念的领域类。

ICarRepository - 用于添加、删除或保存对 Car 对象的更改的接口。

我的问题是,如何检查数据库中所有 Car 对象中 SomeUniqueCode 属性的唯一性?该属性在对象生命周期中的任何时候都由用户更改(不是自动生成的)。当然,一种解决方案是将唯一键放入数据库中,但这不是 DDD 的原则。我见过用于验证单个对象的规范模式。该模式将如何应用于一组 Car 对象?

Specification 类(我们称之为 CheckUniqueCarSpecification)访问 ICarRepository 是否合法?

0 投票
1 回答
251 浏览

design-patterns - 规范模式已修改(构造函数中的候选)

我知道设计模式是由设计而不是由特定代码设置的,但有时我会担心我过多地弯曲模式并且不再遵循设计。

例如,规范模式如下所示:

但对我来说,这不是很可读:

所以我将其更改为在构造函数中传递候选人:

我什至重载了布尔运算符,所以我可以写这样的东西:

现在我想从对设计模式更有经验的人那里知道我是否扭曲了太多以及我应该注意哪些风险。

0 投票
1 回答
77 浏览

sorting - 频繁更新排序数据的模式

假设您正在编写一个博客网站。它显示按“优先级”排序的多个作者最近的博客文章。最高优先级。优先级由以下公式确定:

  1. 这篇文章最近是如何发布的
  2. 吸引了多少评论

订单必须始终实时准确。

按优先级排序很容易。问题是,假设我们的网站非常受欢迎,评论以每分钟数百条的速度飞来。他们飞进了几十个帖子。

有处理这种情况的模式吗?换句话说,我们能不能做得更好,而不仅仅是在帖子上有评论时更新优先级字段,然后在每次加载页面时对帖子进行排序?缓存发布订单并没有多大帮助,因为大量的用户活动会导致订单频繁更改。

对于“模式”,我是从代码和数据库模式的角度讲的。

0 投票
6 回答
63166 浏览

java - 在 java 中使用数百个 if else 实现业务规则的设计模式

我必须用下面数百行代码来实现某些业务规则

我们是否有任何设计模式可以有效地实现这一点或重用代码,以便它可以应用于所有不同的规则。我听说过规范模式,它创建了类似下面的东西

然后是 Is,And, Or 方法的实现,但我认为这不能省去我写 if else (可能是我的理解不正确)......

是否有任何最佳方法来实现具有如此多 if else 语句的此类业务规则?

编辑:只是一个示例示例。A、B、C 等是类的属性。除此之外,还有许多类似的其他规则。我想为此制作一个通用代码。