问题标签 [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 投票
2 回答
284 浏览

postgresql - 如何将 OrderBy 与带有 Ardalis 规范的对象属性的聚合一起使用?

我正在尝试使用 Ef 核心和 Ardalis 规范查询我的 postgresql 数据库。

对于我构建的查询,我想通过使用 OrderBy 和嵌套对象上的属性的聚合来对结果进行排序。

我想要的排序是按评分最高的诊所对诊所列表进行排序。等级为 1-5。

因此,如果一个诊所有两个评分为 5 的评论,它应该排在一个有 5 条评分为 2 或评分为 4 的评论的诊所之上。为此,我必须计算平均值,然后按最高值排序

到目前为止,我的查询没有按预期工作,因为它只能获得最高值。我可以以某种方式在这里插入平均值计算吗?

运行查询:

0 投票
1 回答
68 浏览

domain-driven-design - DDD 建模设置为值对象

我正在尝试以 DDD 方式构建应用程序。想象一下聚合根是一个“页面”,其中包含其他聚合,例如作者、评论者、评论、状态等......

页面还可以有各种设置,例如:

  • 私人页面
  • 允许评论
  • 允许匿名评论
  • x 日期后锁定
  • 蛞蝓

我正在尝试考虑对这些“设置”进行建模的最佳方式。目前我正在寻找一个将每个单独的设置作为值对象的设置集合。如您所见,其中一些本质上是布尔值,而另一些可能包含特定值,例如日期。鉴于可能有几十个设置,其中一些具有默认值,我是使用每个特定设置对“设置”集合建模,还是仅作为具有适用设置的集合建模?

有没有“更好”或标准的 DDD 方法来解决这个问题?我正在考虑在这里使用规范模式,但得出的结论是它并不真正适用

对不起,厚颜无耻的第二个问题....

一个页面可以具有多种状态之一(例如草稿、发布、计划、存档),但在给定时间只有一种状态。关于建模的最佳方法的类似问题。作为状态代表具有身份的事物,我目前已将状态实现为实体。我想知道更好的方法是将其建模为工作流还是状态历史?

0 投票
3 回答
258 浏览

c# - 如何获得不过滤或不做某事的空规范?

我有一个基本控制器,它应该返回一个对象列表(并将它们从 DTO 映射到业务)

如果子控制器决定应用规范(过滤或包含某些内容),它可以通过覆盖该GetSpecification()方法来实现。

但默认情况下,在基类中我不想过滤对象。

我使用ardalis 规范,但它可以是任何通用IQueryable的东西......

实际上它说:

在此处输入图像描述

错误 CS0144 无法创建抽象类型或接口“规范”的实例

0 投票
1 回答
317 浏览

typescript - 尝试实现通用规范和访问者模式时,类型不满足约束并错误地扩展接口

我正在尝试一起实现通用规范模式和通用访问者模式。这是我的基本接口。

为方便起见,我为基本布尔运算符实现了一些基类和一个抽象类。

所有上述工作和编译没有错误。但是当我尝试创建一个扩展基本 SpecificationVisitor 接口的接口并实现一个扩展抽象 CompositeSpecification 的类时遇到编译器问题。

我收到以下错误:

我不太明白它为什么抱怨。我需要改变什么才能让它按照我想要的方式工作?

0 投票
2 回答
114 浏览

clojure - Clojure.Spec 派生或别名另一个规范

我想使用 clojure 规范来建立一组类型约束,这些约束可以被其他规范别名或进一步约束。

例如,我可能有许多字段都需要有效的清理降价。

以下示例适用于验证 ( s/valid?) 但不适用于生成 ( gen/generate)

但是(gen/generate (s/gen ::sanitized-markdown))确实有效。

有没有办法扩展它以保留所有行为::instruction-list::sanitized-markdown

0 投票
0 回答
134 浏览

c# - .Net Core 3.1 Web Api 中的规范模式

我正在使用规范查询搜索方法,它包括搜索、orderBy、groupBy。Search 和 Orderby 都可以,但我在这一行的 groupBy 方法中遇到了问题query.GroupBy(spec.GroupBy).SelectMany(x => x)

请看以下代码:

我想在 ApplyGroupBy(x => x.ShopId); 处使用 ShopId 申请 groupBy

像这样的 BaseSpecifcation 类

FindWithSpecificationPattern 和 GetQuery 方法:

我在这条线上遇到了问题

query = query.GroupBy(spec.GroupBy).SelectMany(x => x);

虽然它不会抛出异常,但我无法得到结果。当我调试时,我看到错误消息

Query='((Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable<Nail.Management.Domain.Entities.Catalog.EmployeeType>)query).DebugView.Query' 引发了“System.InvalidOperationException”类型的异常

我在 Google 中搜索了很多次,但没有看到任何使用规范模式实现 GroupBy 的示例。请帮帮我,非常感谢!

0 投票
1 回答
206 浏览

c# - .然后包含在规范模式,EF Core

谁能指导我,如何在规范模式中添加 .ThenInclude(s) ;我正在使用实体框架核心。

我有下面的 .Include 代码,它正在工作。

}

任何帮助将不胜感激。

0 投票
3 回答
48 浏览

r - dplyr 查找具有特定值集的记录

我有一个具有一些 ID 和相关时间点的数据集。我想过滤掉具有特定时间点组合的 ID。如果我使用 %in% 或 | 进行过滤,我会从特定组合中获取 ID。我如何在 R 中做到这一点?

ID 时间点
1 1
1 6
1 12
2 1
3 1
3 6
3 12
3 18
4 1
4 6
4 12

我想过滤具有时间点 1,6 和 12 的 ID 并排除其他 ID。

结果将是 ID 1,3 和 4

0 投票
1 回答
151 浏览

c# - 在规范模式中组合规范时,无法将 LINQ 表达式转换为 Sql

我正在使用规范模式来执行数据库过滤,并避免在内存上进行(我大致遵循了这篇文章)。我的基本规范类是这样的:

从这个基本规范类,派生出多个强类型规范,它们各自工作得很好。但是,当尝试组合这些规范并在我的 Repository 类中评估 CombinedSpecification 时,就会出现问题:

System.InvalidOperationException:无法翻译 LINQ 表达式 'DbSet() .Where(c => c.ClientCode == __client_0 && c.Status == "Efective")'。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038

下面看一下 CombinedSpecification 类:

为了清楚起见,按单个规范过滤就可以了,但是在组合它们时,LinQ 表达式似乎无法翻译(这对我来说似乎很奇怪,因为我没有使用 SQL AFAIK 不支持的任何方法)。我避免显示 Repository 类以减少此问题的数量,但无论如何,这里是我的 Find() 方法的相关行:

提前感谢您的帮助,我希望我的第一个问题已经明确说明!

0 投票
0 回答
45 浏览

java - 用于查找最新状态的 Spring Data JPA 规范

我正在尝试创建一个规范来根据他们的最新状态(可用、不可用)过滤人们。考虑以下实体。

在这个问题的帮助下,我创建了以下规范来根据他们的状态类型过滤一个人。

我知道我必须greatestcreatedAt内部使用,Status但我无法弄清楚语法。这是我的buildJoinSpecification.

我将不胜感激任何帮助。谢谢。