2016-08-23 66 views
0

我正在构建一个具有报告的应用程序,并且每个报告都包含多个结果。这绝对是报告和结果之间的HAS-A组合类型关系。对象构图 - 构图者应该知道构图对象吗?

我的问题是这样的:如果结果知道它属于哪个报告?

方法A(其中,结果不知道哪个报告它属于):

Report: 
    name 
    id 
    results[] 


Result: 
    value 
    type 
    id 

方法B(其中一个结果知道哪些举报属于,但报告中不包含的结果):

Report: 
    name 
    id 

Result: 
    value 
    type 
    id 
    report_id 
+1

这完全取决于您的域名,因此社区无法回答。 – PeeHaa

+0

我想补充一点,它也取决于我们所谈论的对象模型的类型 - 商业模型?演示模型?持久性模型?对象是否可以修改?等 – guillaume31

回答

0

我认为这是不可能的回答给定的信息这个问题,所以不是一个简单的答案,让我们看看,可能影响决策的事情:

你需要回参考吗?显然,如果你不需要它,不要创建它。如果你真的需要它,尽管你仍然可以用某种类型的Repository查找来代替它:ReportRepository.findReport(Result)

反向引用成本与没有它的成本有什么关系?如果您包含反向引用,如果所有权发生更改(可能不会发生在您的案例中),则需要保持两个引用同步。如果您没有反向引用,但需要朝这个方向导航,则必须跳过额外的箍环。当持久化双向关系时,JPA映射等事情变得更加复杂。当您需要以某种方式序列化结果时,可能会发生同样的情况。

查看Aggregate pattern from DDD也是值得的,虽然它似乎不适用于您的情况。

+0

当关联是双向的时候,你需要在引用之间同步,但在OP的例子中似乎并不是这种情况。 – guillaume31

+0

@ guillaume31这就是为什么我写了“可能不会发生在你的情况” –

+0

然而,你似乎在谈论所有权变化的低概率,而不是存在双向关系的低概率...... – guillaume31