标签: aggregate

我打破了我的总界限吗?

我正在使用NHibernate建模一个非常基本的ASP.NET MVC应用程序,我似乎陷入了我的设计.这是我模型的草图:

模型1 http://i29.tinypic.com/309614n.jpg

正如你所看到的,这是非常基本的,但我有一些担忧.用户根实体和组织根实体通过两个一对多关系访问同一Organization_Users实体子实体.这似乎不对,我认为我打破了聚合边界.这个模型对我来说很有趣,但我喜欢这个主意,因为我希望有这样的代码:

var user = userRepository.Load(1);
var list = user.Organizations; // All the organizations the user is a part of.
Run Code Online (Sandbox Code Playgroud)

var org = orgRepository.Load(1);
var list = org.Users; // All the users in an organization.
Run Code Online (Sandbox Code Playgroud)

表格和角色中的额外数据也将由组织实体使用.这是一个糟糕的设计吗?如果你有任何想法会很棒.我还在试着想一想DDD的想法.谢谢

nhibernate domain-driven-design model aggregate

8
推荐指数
1
解决办法
402
查看次数

是否可以从聚合工厂调用规范进行验证,或者该验证调用是否属于单元测试(DDD)?

我创建了一个工厂和一组规范来创建和验证聚合根.目前我对工厂进行了一些测试,这些测试称工厂的产品规格,但我想知道这是否足够.从设计的角度来看,将工厂与其产品的规格相结合可能会更好,因为它们密切相关.

如果聚合根产品的规范用于验证而不是用于创建,那么从工厂内部调用它是否有意义?

或者单位测试是否足够好?

validation domain-driven-design aggregate specification-pattern factory-pattern

8
推荐指数
1
解决办法
456
查看次数

R reshape2中的cast()调用的自定义聚合函数出错

我想使用R将具有非唯一rownames的表中的数值数据汇总到具有唯一行名的结果表,其中值使用自定义函数进行汇总.摘要逻辑是:如果最大值与最小值的比率<1.5,则使用值的均值,否则使用中值.因为表非常大,我试图在reshape2包中使用melt()和cast()函数.

# example table with non-unique row-names
tab <- data.frame(gene=rep(letters[1:3], each=3), s1=runif(9), s2=runif(9))
# melt
tab.melt <- melt(tab, id=1)
# function to summarize with logic: mean if max/min < 1.5, else median
summarize <- function(x){ifelse(max(x)/min(x)<1.5, mean(x), median(x))}
# cast with summarized values
dcast(tab.melt, gene~variable, summarize)

上面的最后一行代码会导致错误通知.

Error in vapply(indices, fun, .default) : 
  values must be type 'logical',
 but FUN(X[[1]]) result is type 'double'
In addition: Warning messages:
1: In max(x) : no non-missing arguments to max; returning -Inf …

casting aggregate r reshape reshape2

8
推荐指数
2
解决办法
5614
查看次数

更新聚合内的实体

我在SO上读了一个类似的问题:如何更新Aggregate中的实体,但我仍然不确定用户界面应该如何与聚合内的实体进行交互.

假设我有User一堆,有一堆Addresses.用户是聚合根,而地址仅存在于聚合中.

在Web界面上,用户可以编辑他的地址.基本上,会发生什么:

  • 用户在其Web界面上看到地址列表
  • 他点击了一个地址,然后被重定向到这个页面: edit-address?user=1&address=2
  • 在这个页面上,他得到一个表格,他可以修改这个地址.

我决定绕过聚合根,这很简单:

  • 我们会直接加载AddressId
  • 我们会更新它,然后保存它

因为我们想用DDD方式做,所以我们有不同的解决方案:

  1. 我们要求用户通过Id获取此地址:

    address = user.getAddress(id);
    address.setPostCode("12345");
    address.setCity("New York");
    em.persist(user);

    这种方法的问题是,IMO,聚合根仍然没有更多的控制地址的作用.它只返回对它的引用,因此与绕过聚合没有太大区别.

  2. 或者我们告诉聚合更新现有地址:

    user.updateAddress(id, "12345", "New York");
    em.persist(user);

    现在,聚合控制了对此地址所做的操作,并且可以采取任何必要的操作来更新地址.

  3. 或者我们将地址视为值对象,我们不更新我们的Address,而是删除它并重新创建它:

    user.removeAddress(id);
    address = new Address();
    address.setPostCode("12345");
    address.setCity("New York");
    user.addAddress(address);
    em.persist(user);

    最后一个解决方案看起来很优雅,但意味着地址不能是实体.然后,如果需要将其视为实体,例如因为聚合中的另一个业务对象具有对它的引用,该怎么办?

我很确定我在这里遗漏了一些东西,以正确理解聚合概念以及它如何在现实生活中使用,所以请不要犹豫,发表您的意见!

orm domain-driven-design aggregate aggregateroot

8
推荐指数
1
解决办法
2063
查看次数

嵌套聚合函数在postgresql中进行分组

我试图使用嵌套聚合函数和分组来获得平均值.我想要做的是:

SELECT AVG(SUM(x) GROUP BY y) WHERE ... GROUP BY ...;
Run Code Online (Sandbox Code Playgroud)

也就是说,对于返回的每一行,我希望其中一个字段是和的平均值,其中每个和是在y相同的行上.

如果可能的话,我想避免使用子选择.

sql postgresql grouping aggregate

8
推荐指数
1
解决办法
9977
查看次数

在给定时间间隔内的聚合函数

我的SQL有点生疏,我遇到这个问题有点困难.假设我有一个带有Timestamp列和Number列的表.目标是返回包含某个任意选择的常规间隔的平均值的结果集.

因此,例如,如果我有以下初始数据,则间隔为5分钟的结果输出如下:

time                               value
-------------------------------    -----
06-JUN-12 12.40.00.000000000 PM      2
06-JUN-12 12.41.35.000000000 PM      3
06-JUN-12 12.43.22.000000000 PM      4
06-JUN-12 12.47.55.000000000 PM      5
06-JUN-12 12.52.00.000000000 PM      2
06-JUN-12 12.54.59.000000000 PM      3
06-JUN-12 12.56.01.000000000 PM      4

OUTPUT:

start_time                         avg_value
-------------------------------    ---------
06-JUN-12 12.40.00.000000000 PM      3
06-JUN-12 12.45.00.000000000 PM      5
06-JUN-12 12.50.00.000000000 PM      2.5
06-JUN-12 12.55.00.000000000 PM      4
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个Oracle数据库,因此特定于Oracle的解决方案可以正常工作.当然,这可以通过存储过程完成,但我希望在单个查询中完成任务.

sql oracle aggregate oracle10g

8
推荐指数
2
解决办法
7900
查看次数

R在函数中聚合多个参数

我试着通过在data.frame上使用聚合来避免耗时的循环.但我需要其中一列的值进入最终计算.

dat <- data.frame(key = c('a', 'b', 'a','b'), 
rate = c(0.5,0.4,1,0.6), 
v1 = c(4,0,3,1), 
v2 = c(2,0,9,4))

>dat
  key rate v1 v2
1   a  0.5  4  2
2   b  0.4  0  0
3   a  1.0  3  9
4   b  0.6  1  4

aggregate(dat[,-1], list(key=dat$key),  
    function(x, y=dat$rate){
        rates <- as.numeric(y)
        values <- as.numeric(x)
        return(sum(values*rates)/sum(rates))
    })
Run Code Online (Sandbox Code Playgroud)

注意:该功能只是一个例子!
这个实现的问题是y=dat$rate在dat上提供所有4个速率,当我想要的只是2个聚合速率!Anny对如何做到这一点有所了解?谢谢!

aggregate r dataframe

8
推荐指数
2
解决办法
6978
查看次数

如何获得聚合函数的所有总和?

这是一些示例数据:

dat="x1 x2 x3 x4 x5
1   C  1 16 NA 16
2   A  1 16 16 NA
3   A  1 16 16 NA
4   A  4 64 64 NA
5   C  4 64 NA 64
6   A  1 16 16 NA
7   A  1 16 16 NA
8   A  1 16 16 NA
9   B  4 64 32 32
10  A  3 48 48 NA
11  B  4 64 32 32
12  B  3 48 32 16"

data<-read.table(text=dat,header=TRUE)   
aggregate(cbind(x2,x3,x4,x5)~x1, …
Run Code Online (Sandbox Code Playgroud)

aggregate r

8
推荐指数
2
解决办法
5027
查看次数

更快的降低光栅R分辨率的功能

我正在使用光栅包来降低大栅格的分辨率,使用像这样的函数聚合

require(raster)    
x <- matrix(rpois(1000000, 2),1000)

a <-raster(x)
plot(a)

agg.fun <- function(x,...) 
    if(sum(x)==0){
        return(NA)
    } else {
        which.max(table(x))
    }

a1<-aggregate(a,fact=10,fun=agg.fun)
plot(a1)
Run Code Online (Sandbox Code Playgroud)

我必须聚合的光栅图像大得多34000x34000所以我想知道是否有更快的方法来实现agg.fun函数.

aggregate r raster r-raster

8
推荐指数
1
解决办法
1966
查看次数

没有parallel_enabled的ODCIAggregateMerge

这些是Oracle docs的引文:

[可选]通过合并两个聚合上下文合并并返回单个上下文。此操作组合子集上的聚合结果,以获得整个集合上的聚合。在对集合进行串行或并行评估时,可能需要执行此额外步骤。如果需要,它在步骤4之前执行:

在此类汇总操作中,将调用ODCIAggregateMerge()接口来计算超级聚合值。

我们有一个聚合函数,我们不想并行运行。
原因是上下文的合并将消耗资源,并且将迫使我们使用与现在使用的数据结构不同的数据结构,从而有效地抵消了并行执行带来的任何性能优势。

因此,我们没有函数声明为parallel_enabled,而是以防万一的方式返回ODCIAggregateMerge中的ODCIconst.Error。

但是,第一个引用文档声称,即使在串行评估中也可能发生合并。
超级聚合(汇总,多维数据集)是明显的示例,但是还有其他示例吗?

我完全无法通过简单的分组依据来重现它,如果没有parallel_enabled,就永远不会调用merge,并且似乎在该分组中始终只创建一个上下文。

是否可以安全地假设没有parallel_enabled设置,合并将永远不会运行?
您见过该规则的反例吗?

sql oracle plsql aggregate

8
推荐指数
1
解决办法
145
查看次数