我正在为我的应用程序中的域模型建模。显然,一些对象关系是关联,但这些关联也有属性。例如:
Foo可以拥有一对多的条形图。但是,关联具有属性,例如该关联有效的日期范围。所以,我这样做的方式如下:
public interface Association<S, T> {
public S getSource();
public T getTarget();
}
然后对于类似上面的内容:
public class FooToBarAssociation implements Association<Foo, Bar> {
public Foo getSource();
public Bar getTarget();
public Date getFromDate();
public Date getToDate();
}
然后Foo类有:
private List<FooToBarAssociation> associations;
我的问题是:
这是建模与属性关联的合适方式吗?
业务逻辑应该在哪里添加/删除与Foo的关联?创建FooToBarAssociation有时需要一些业务逻辑,我想知道是否应该在FooService中处理,然后调用setAssociations而不是在模型对象中。我一直听说尽可能地将商业逻辑排除在模型对象之外。
答案 0 :(得分:0)
与您在UML中实现关联类时相同的规则适用。 你创建的是一种方式,其他可能是嵌套--Foo包含Assoc,而Assoc又包含Bar。您也可以在包含Assoc和Assoc的Bar的另一种方式创建它,包含Foo。 Foo可以包含Assoc和Bar可以包含Assoc。有很多可能性,它只取决于您的要求。 在您的示例中,您的解决方案很好 你听到的似乎很好,但有时它可能很复杂。
答案 1 :(得分:0)
您的问题的答案:
我有另一个建议,但它适用于特定情况。如果您需要模型一次只使用一个关联,则以下简化模型将起作用。
public class Foo {
private Date startDate;
private Date endDate;
private Bar bar;
public Date getStartDate() {
return startDate;
}
public Date getEndDate() {
return endDate;
}
public Bar getBar() {
return bar;
}
}
其中开始日期和结束日期对应于条形与Foo关联的时间段。这样,即使Foo to Bar是一对多,你一次只能在一个Bar上工作。 Foo Bar关联将根据生效日期从数据库中提取,该生效日期位于开始日期和结束日期之间。