标签: aggregate

DDD:聚合根

我需要帮助找到我的聚合根和边界.

我有3个实体:Plan,PlannedRole和PlannedTraining.每个计划都可以包含许多PlannedRoles和PlannedTraining.

解决方案1:起初我认为Plan是聚合根,因为PlannedRole和PlannedTraining在计划的上下文中没有意义.他们总是在计划之内.此外,我们有一个业务规则,即每个计划最多可以有3个PlannedRoles和5个PlannedTraining.所以我认为通过提名计划作为聚合根,我可以强制执行这个不变量.

但是,我们有一个搜索页面,用户可在其中搜索计划.结果显示了计划本身的一些属性(而不是PlannedRoles或PlannedTrainings).我想如果我必须加载整个聚合,它会有很多开销.有近3000个计划,每个计划可能有几个孩子.将所有这些对象加载到一起然后忽略搜索页面中的PlannedRoles和PlannedTraining对我来说没有意义.

解决方案2:我刚刚意识到用户还需要2个搜索页面,他们可以搜索计划角色或计划培训.这让我意识到他们正试图独立地访问这些对象并"脱离"Plan的背景.所以我认为我的初始设计错了,这就是我想出这个解决方案的方法.所以,我认为这里有3个聚合,每个实体有1个聚合.

这种方法使我能够独立搜索每个实体,并解决了解决方案1中的性能问题.但是,使用这种方法我不能强制执行前面提到的不变量.

还有另一个不变量,即只有在具有特定状态时才能更改计划.因此,我不能将任何PlannedRoles或PlannedTrainings添加到不处于该状态的计划中.同样,我不能用第二种方法强制执行这种不变量.

任何建议将不胜感激.

干杯,莫什

domain-driven-design aggregate aggregateroot aggregates

6
推荐指数
1
解决办法
3140
查看次数

我可以从sql server中的一个sql查询中获取count()和行吗?

我想获得结果的总数和一些查询的前n行 - 是否可以在一个语句中?

我希望结果如下:

count(..) column1        column2
125         some_value   some_value
125         some_value   some_value
Run Code Online (Sandbox Code Playgroud)

先感谢您!

sql t-sql sql-server aggregate

6
推荐指数
3
解决办法
6154
查看次数

元组聚合构造推断类型和elides移动/复制构造函数调用?

考虑以下mypair类(我不确定这是否是最好的做事方式,但似乎有效):

#include <iostream>

struct A
{
  A() {}
  A(const A&) { std::cout << "Copy" << std::endl; }
  A(A&&) { std::cout << "Move" << std::endl; }
  std::string s;
};

template <class T0, class T1>
struct mypair
{
  T0 x0;
  T1 x1;
};

template <class T0, class T1, int N = -1>
struct get_class {};

template<class T0, class T1>
struct get_class<T0, T1, 0>
{
  static T0& get_func(mypair<T0, T1>& x) { return x.x0; }
  static const T0& get_func(const mypair<T0, T1>& x) …
Run Code Online (Sandbox Code Playgroud)

c++ optimization tuples aggregate c++11

6
推荐指数
1
解决办法
605
查看次数

NHibernate QueryOver JoinQueryOver中的Sum

虽然我正在阅读NHibernate Cookbook以及所有可用的论坛帖子,但我仍然无法完成这个简单的查询:

我有每个人都有一个帐户的用户.每个帐户都有余额.这些类看起来像这样:

public class User
{
    public virtual int Id { get; set; }
    public virtual Account Account { get; set; }
    public virtual bool Active { get; set; }
}

public class Account
{
    public virtual int Id { get; set; }
    public virtual double Balance { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我想总结所有活跃用户的平衡.没有更多......在简单的SQL中它很容易:

SELECT SUM(a.Balance)
FROM User u
INNER JOIN Account a
ON u.Account_id = a.Id
WHERE u.Active = 'true'
Run Code Online (Sandbox Code Playgroud)

我没有任何想法,我怎么能用NHibernate 3的新QueryOver-Api解决这个问题.你能提供一个代码示例吗?

先感谢您!

丹尼尔朗


编辑
我知道,使用NHibernate Linq它也很容易,但我想用QueryOver解决它...这是工作Linq-示例:

var result …
Run Code Online (Sandbox Code Playgroud)

nhibernate join aggregate queryover

6
推荐指数
1
解决办法
7876
查看次数

更快的方法来创建通过id聚合列的变量

有更快的方法吗?我想这是不必要的慢,并且这样的任务可以通过基本功能完成.

df <- ddply(df, "id", function(x) cbind(x, perc.total = sum(x$cand.perc)))
Run Code Online (Sandbox Code Playgroud)

我是很新的R.我已经看过了by(),aggregate()tapply(),但并没有让他们在所有或我想要的方式工作.我希望将总和附加到原始数据帧,而不是返回较短的向量.做这个的最好方式是什么?

编辑:这是应用于我的数据的答案的速度比较.

> # My original solution
> system.time( ddply(df, "id", function(x) cbind(x, perc.total = sum(x$cand.perc))) )
   user  system elapsed 
 14.405   0.000  14.479 

> # Paul Hiemstra
> system.time( ddply(df, "id", transform, perc.total = sum(cand.perc)) )
   user  system elapsed 
 15.973   0.000  15.992 

> # Richie Cotton
> system.time( with(df, tapply(df$cand.perc, df$id, sum))[df$id] )
   user  system elapsed 
  0.048   0.000   0.048 

> # John
> system.time( …
Run Code Online (Sandbox Code Playgroud)

performance aggregate r plyr

6
推荐指数
2
解决办法
2945
查看次数

获取SQL查询中每个不同记录的最大平均值

我有一些表格,其中包含有关球员的数据以及本赛季他们在联赛中在保龄球中心击败的比赛.这个特定查询的用途是对男性和女性今年的前X平均值进行排序.我已经把这一切都搞定了,但是在某些特定情况下,当一些球员在多个联赛中打球并且在顶级X中有超过一个平均值时,我仍然存在问题.

显然,我只想列出给定球员的最佳平均值,所以如果球员A在联盟ABC中的平均得分最高,而联盟DEF的平均得分为198,那么我只想要列出200.

这是我想要更改的查询的简化版本,因为现在我必须手动删除重复项或者我必须用另一种语言编写分类器,但我宁愿在纯SQL中执行此操作.(我只从该示例的查询中删除了不相关的信息):

SELECT playerId, ROUND(AVG(score),2)Average, season, leagueName, COUNT(score)NumGames FROM Scores
WHERE season = '2011-2012' AND score > -1
GROUP BY season, playerID, leagueName
ORDER BY Average DESC LIMIT 0,30
Run Code Online (Sandbox Code Playgroud)

基本上,该Scores表包含每个单独的游戏,一个playerId,玩游戏的季节和leagueName(以及本例中不需要的其他列).

WHERE是为了确保比赛在本赛季进行,并且得分为正(-1表示人们不在场时).我根据赛季,球员ID和联盟名称对所有内容进行分组,因此我得到每个球员的平均PER LEAGUE,而不是在不同联赛中所有比赛的平均值.

我尝试使用DISTINCT关键字,但这不起作用,因为我不能DISTINCT只使用一个列.我也尝试了其他的东西,但是它们都没有接近工作,所以我想知道是否甚至可以这样做,或者我是否必须使用另一种语言对这个结果集进行排序并删除重复项?

sql sqlite aggregate aggregate-functions

6
推荐指数
1
解决办法
3897
查看次数

获取具有MIN/MAX值的行的其他字段值

以下是我的数据示例以及我希望看到的内容:

JOB    OPSEQ    OPCOMPLETE   OPCODE

100     1        yes          pull  
100     2        yes          weld  
100     3        no           grind    
100     4        no           machine  
100     5        no           asmbl  
Run Code Online (Sandbox Code Playgroud)

所以我想选择min(opseq),其中opcomplete = no和max(opseq),其中opcomplete = yes,以及min和max opseq的操作码.在这个例子中,
min:
op (opseq):3 操作码min op:grind
max(opseq):2 opcode of max op:weld

我正在寻找的原因是获得最不完整的opseq的操作码.
我让min和max opseq工作得很好.这就是我所拥有的:

(SELECT   company, jobnum, MAX(oprseq) AS maxclosed, opcomplete
 FROM     joboper AS joboper_2
 WHERE    (company = 'lot') AND (opcomplete = '1')
 GROUP BY company, jobnum, opcomplete) AS t_joboper1 ON joboper.company = t_joboper1.company AND joboper.jobnum = t_joboper1.jobnum INNER JOIN …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server aggregate max min

6
推荐指数
1
解决办法
539
查看次数

如何在R中的数据框中按日期每8天获得一个值的总和

我不经常在R中使用日期,但我想这很容易.我有几个年的日常数据和一些数值,我希望每8天得到相关值的总和.什么是最好的方法?

您将提供的任何帮助将不胜感激!

 str(temp)
'data.frame':648 obs. of  2 variables:
 $ Date : Factor w/ 648 levels "2001-03-24","2001-03-25",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ conv2: num  -3.93 -6.44 -5.48 -6.09 -7.46 ...

head(temp)
Date              amount
24/03/2001  -3.927020472
25/03/2001  -6.4427004
26/03/2001  -5.477592528
27/03/2001  -6.09462162
28/03/2001  -7.45666902
29/03/2001  -6.731540928
30/03/2001  -6.855206184
31/03/2001  -6.807210228
1/04/2001   -5.40278802
Run Code Online (Sandbox Code Playgroud)

我试图使用聚合函数,但由于某些原因它不起作用,它以错误的方式聚合:

z <- aggregate(amount ~ Date, timeSequence(from =as.Date("2001-03-24"),to =as.Date("2001-03-29"), by="day"),data=temp,FUN=sum)
Run Code Online (Sandbox Code Playgroud)

aggregate r time-series

6
推荐指数
2
解决办法
6954
查看次数

两列之和的划分

我需要取两列的总和并除以总数.两列都是十进制数据类型.这是我到目前为止所做的不起作用.

SELECT total_salary / DistEnroll
FROM   dbo.vw_Salary
WHERE  DistEnroll = (
           SELECT DISTINCT(distenroll)
           FROM   dbo.vw_Salary
           WHERE  YEAR = '2012'
                  AND dist_name = 'Sch Dist'
       )
       AND total_salary = (
               SELECT SUM(total_salary)
               FROM   [vw_salary]
               WHERE  YEAR = '2012'
                      AND dist_name = 'Sch Dist'
           )
Run Code Online (Sandbox Code Playgroud)

sql aggregate division

6
推荐指数
1
解决办法
3万
查看次数

领域驱动设计:如何在不同的有界环境中处理用户实体?

我有一个关于域驱动设计的问题.在我的应用程序的用户帐户/配置文件有界上下文中,有一个用户实体,其中包含帐户信息(ID,用户名,密码,电子邮件,盐等)和个人资料信息(全名,头像,生日,性别等).我还有另一个有效的工作岗位/应用上下文,其中每个工作岗位都有雇主用户,每个工作申请都有申请人用户.

问题是,作业有限上下文中的雇主/申请人用户是否应该是我用于用户帐户有限上下文的相同用户实体?或者我应该为雇主和申请人设计不同的用户类型实体?

如您所见,只有来自帐户有界上下文的ID,全名,电子邮件和头像等信息才与作业有限的上下文相关.如果雇主/申请人是来自帐户/用户档案的相同用户实体,则它将加载更多无用的数据(不需要知道雇主/申请人的用户密码).但是如果我为它们创建不同的实体类,它将使数据持久性更加棘手,因为在不同实体类中进行的更改可以更改同一数据库表中的相同数据.

你怎么看?我是否应该为不同的有界上下文/聚合使用一个用户实体用于所有或不同的用户实体?如果需要后者,我该如何处理数据/实体持久性?

persistence entity domain-driven-design aggregate bounded-contexts

6
推荐指数
1
解决办法
1852
查看次数