标签: aggregate

管理实体的历史对象

我们正在将现有系统转换为 DDD,并且正在努力理解一些概念。

我们有一个名为 的聚合根,它具有和 等Animal属性。目前数据库有两个表,分别称为和,它们存储状态更改时有关动物的信息。这些表有时会删除记录,并且在从.StatusSourceStatusHistorySourceHistoryAnimalAnimalRepository

所以最大的问题是它们属于哪里?以下是我们的一些想法:

  • 将它们作为不同的实体对象作为动物聚合的一部分。并具有允许更新它们的相应方法,例如:Animal.UpdateStatus(newStatus),这将使用对象添加到集合中new StatusHistory(this)。但如上所述,当为存储库获取现有动物时,很少需要这些,因此我们不希望存储库加载它们。我们目前没有使用 ORM,而是使用存储库内的表数据网关手动映射。

  • 使每个历史实体成为聚合根。我们不喜欢这种做法,因为感觉我们并没有真正对领域进行建模,而只是朝着Active Record Pattern. 此外,为动物更新这些的任务必须位于动物实体之外。

  • 我们可以尝试将这些历史组合成另一个聚合根,称为AnimalHistory其全部目的是维持动物的历史。但这又会改变将历史存储到动物以外的其他事物中的逻辑。可能是像这样的服务AnimalProcessingService,感觉我们可能正在走向贫血的设计。

我希望有另一种选择可以为我们提供更简洁的设计。

design-patterns domain-driven-design aggregate

5
推荐指数
1
解决办法
2205
查看次数

如何使用JPA聚合字符串?

基础数据:

DEPTNO ENAME
------ ------
    20 SMITH
    30 ALLEN
    30 WARD
    20 JONES
    30 MARTIN
    30 BLAKE
    10 CLARK
    20 SCOTT
    10 KING
    30 TURNER
    20 ADAMS
    30 JAMES
    20 FORD
    10 MILLER
Run Code Online (Sandbox Code Playgroud)

期望的输出:

DEPTNO EMPLOYEES
------ ---------
    10 CLARK,KING,MILLER
    20 SMITH,FORD,ADAMS,SCOTT,JONES
    30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
Run Code Online (Sandbox Code Playgroud)

我尝试过这个 jpql 查询:

 SELECT deptno, new list(ename) as employees
 FROM dept_emp
Run Code Online (Sandbox Code Playgroud)

然而,出现了一个例外:

org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:第 1 行第 15 列附近的新内容

JPA 2.1
休眠 4.3.1

另请参阅: /sf/answers/1719943221/

java string hibernate jpa aggregate

5
推荐指数
1
解决办法
7044
查看次数

在 Xcode 中,如何在运行测试时不运行某些运行脚本构建阶段?

我的项目当前已设置,以便 MyApp 目标包含一些运行脚本构建阶段。这些脚本取决于构建阶段的顺序。例如,有一个脚本在复制捆绑资源之前运行,另一个脚本在复制捆绑资源之后运行。

我的测试目标取决于 MyApp,因此当我运行测试(产品菜单、测试)时,我不想包含其中一些脚本,因为它会减慢测试速度。

我想创建一个包含 MyApp 目标的聚合目标。然后将测试时我不想运行的脚本从 MyApp 移出并移入聚合。但是,我不知道如何配置这些脚本运行时的相同顺序。

有没有办法做到这一点?或者也许是一个更好的解决方案?

testing xcode aggregate target ios

5
推荐指数
1
解决办法
3762
查看次数

MongoDB Aggregate 如何配对相关记录进行处理

我在 MongoDB 数据库中捕获了一些事件数据,其中一些事件成对发生。

例如:DOOR_OPEN 和 DOOR_CLOSE 是两个成对发生的事件

事件集合:

{ _id: 1, name: "DOOR_OPEN", userID: "user1", timestamp: t }
{ _id: 2, name: "DOOR_OPEN", userID: "user2", timestamp: t+5 }
{ _id: 3, name: "DOOR_CLOSE", userID: "user1", timestamp:t+10 }
{ _id: 4, name: "DOOR_OPEN", userID: "user1", timestamp:t+30 }
{ _id: 5, name: "SOME_OTHER_EVENT", userID: "user3", timestamp:t+35 }
{ _id: 6, name: "DOOR_CLOSE", userID: "user2", timestamp:t+40 }
...
Run Code Online (Sandbox Code Playgroud)

假设记录按时间戳排序, _id: 1 和 _id: 3 是“user1”的“配对”。_id: 2 和 _id: 6 是“user2”。

我想为每个用户获取所有这些 DOOR_OPEN 和 …

aggregate mongodb

5
推荐指数
1
解决办法
53
查看次数

SQL聚合函数选择唯一值

我有一个包含两列的行集:technical_idnatural_id。行集实际上是复杂查询的结果。假定列中的值之间的映射是双射(即,对于两行相同technical_idnatural_ids为相同也为不同的technical_idS中的natural_ids为不同太)。(technical_id,natural_id)由于原始查询中的连接,这些对在行集中不是唯一的。例子:

with t (technical_id, natural_id, val) as (values
  (1, 'a', 1),
  (1, 'a', 2),
  (2, 'b', 3),
  (2, 'b', 2),
  (3, 'c', 0),
  (3, 'c', 1),
  (4, 'd', 1)
)
Run Code Online (Sandbox Code Playgroud)

不幸的是,双射仅由应用程序逻辑强制执行。的natural_id实际上是从多个表收集并使用由coalesce基于表达式,以便它的独特性几乎可以通过分贝约束来执行。

我需要通过technical_id假设natural_id是唯一的来聚合行集的行。如果不是(例如,如果将元组(4, 'x', 1)添加到示例数据中),则查询应该失败。在理想的 SQL 世界中,我会使用一些假设的聚合函数:

select technical_id, only(natural_id), sum(val)
from t
group by technical_id;
Run Code Online (Sandbox Code Playgroud)

我知道 SQL 中没有这样的功能。有什么替代方法或解决方法吗?Postgres 特定的解决方案也可以。

请注意,group by technical_id, natural_idor select …

sql postgresql aggregate unique aggregate-functions

5
推荐指数
1
解决办法
764
查看次数

具有重要不变量的潜在大型集合的 DDD 聚合

我知道聚合应该很小并且它们应该保护不变量。我也知道在聚合中保存大型集合会影响性能。

我有一个用例,需要保护它的不变量,但也会导致大量收集。

Aggregate 是Vendor,它可以有多个活动的Promotion (s)。每个Promotion都有PromotionTypeStartDateEndDate。不变量是:

  • 在任何时候,每种促销类型最多可以有一次促销
  • 在任何时间点最多可以有 2 个促销活动
public Vendor : Aggregate {
    public Guid Id;
    public List<Promotion> Promotions;
    // some other Vendor props here

    public void AddPromotion(Promotion promo) {
        // protect invariants (business rules) here:
        // rule_1: if 2 promotions are already active during any time between promo.Start and promo.End then throw ex
        // rule_2: if during any time between promo.Start and promo.End there …
Run Code Online (Sandbox Code Playgroud)

domain-driven-design aggregate invariants

5
推荐指数
1
解决办法
305
查看次数

Python with DataFrame合并聚合...错误:''既是索引级别又是列标签,这是不明确的

import pandas as pd

data1 = [
{'File': '7396ee8aea09.json', 'Last': '2019-04-25 20:24:28+00:00', 'Size': 78796, 'COLA': 'STANDARD'}, 
{'File': '7777682e4/ip/done', 'Last': '2019-04-24 21:45:01+00:00', 'Size': 4, 'COLA': 'CUSTOM'}, 
{'File': 'erparameters.json', 'Last': '2019-04-24 21:45:01+00:00', 'Size': 351, 'COLA': 'STANDARD'}
]
data2 = [
{'File': '3343e4/ip/ip.json', 'Last': '2019-04-24 21:45:01+00:00', 'Size': 20, 'COLA': 'STANDARD'}, 
{'File': 'ta-00000-of-00001', 'Last': '2019-04-24 22:43:17+00:00', 'Size': 140216236, 'COLA': 'STANDARD'}, 
{'File': '-20514.ckpt.index', 'Last': '2019-04-24 22:43:17+00:00', 'Size': 3168, 'COLA': 'STANDARD'}, 
]
# right now 2 for the prova but could be much more..
datas = …
Run Code Online (Sandbox Code Playgroud)

merge aggregate dataframe python-3.x pandas

5
推荐指数
1
解决办法
4957
查看次数

R中xtabs和aggregate之间na.action的不一致

我有以下 data.frame:

x <- data.frame(A = c("Y", "Y", "Z", NA),
                B = c(NA, TRUE, FALSE, TRUE),
                C = c(TRUE, TRUE, NA, FALSE))
Run Code Online (Sandbox Code Playgroud)

我需要计算下表xtabs

A      B C
  Y    1 2
  Z    0 0
  <NA> 1 0
Run Code Online (Sandbox Code Playgroud)

我被告知要使用na.action = NULL,它确实返回了我需要的表:

xtabs(formula = cbind(B, C) ~ A,
      data = x,
      addNA = TRUE,
      na.action = NULL)

A      B C
  Y    1 2
  Z    0 0
  <NA> 1 0
Run Code Online (Sandbox Code Playgroud)

但是,na.action = na.pass返回一个不同的表:

xtabs(formula = cbind(B, C) ~ A, …
Run Code Online (Sandbox Code Playgroud)

aggregate r counting na

5
推荐指数
1
解决办法
354
查看次数

MongoDB java API 聚合 $lookup 和管道使用变量

我有 2 个集合假设为 1 对多关系,例如用户和评论。要求是将用户与其最新评论合并为单个对象,并返回新合并对象的列表作为结果。

聚合在 mongo 控制台中完美运行

db.user.aggregate(
        {
            $addFields:{
                cId: {$toString: '$_id'},
                user: '$$ROOT'
            }
        },
        {$match: {'invitees': {$elemMatch: {'user.userId': '5e70e82532044a5e4e7cbc8d'}}}},
        {$lookup: {
                from: 'comment',
                let: {'cc': '$cId'},
                pipeline: [
                    {$match: {$expr: {$and: [{$eq: ['$$cc', '$userId']},{$gte: ['$time', '$$NOW']}]}}},
                    {$sort: {'time': -1}},
                    {$limit: 1}
                ],
                as: 'next'
            }
        },
        {$unwind: {path: '$next'}},
        {
            $project: {
                _id: 0,
                user: 1,
                next: 1,
                status: {
                    $map: {
                        input: {
                            $filter: {
                                input: '$invitees',
                                as: 'item',
                                cond: {
                                    $eq: ['$$item.user.userId', '$userId']
                                } …
Run Code Online (Sandbox Code Playgroud)

java aggregate mongodb

5
推荐指数
1
解决办法
1393
查看次数

在列 * 和 * 索引上使用 groupby 和聚合与熊猫数据框

我有一个与此类似的表,在 (A, B) 上有一个多索引

>>> columns = ["A", "B", "C", "D"]
... data = [
...     [1, 1, 99, 22],
...     [1, 2, 87, 24],
...     [1, 3, 65, 31],
...     [2, 1, 88, 30],
...     [2, 2, 76, 33],
...     [2, 3, 23, 32],
...     [2, 4, 38, 28],
...     [3, 1, 33, 40],
...     [3, 2, 23, 41],
...]
>>>
>>> pd_table = pd.DataFrame(data=data, columns=columns)
>>> pd_table.set_index(["A", "B"], inplace=True)
>>> print(pd_table)
      C   D
A B
1 1  99 …
Run Code Online (Sandbox Code Playgroud)

python aggregate dataframe pandas pandas-groupby

5
推荐指数
1
解决办法
204
查看次数