Java 对聚合对象建模的正确方法是什么?
我有两个域实体:Java 对聚合对象建模的正确方法是什么?,java,oop,object-oriented-analysis,Java,Oop,Object Oriented Analysis,我有两个域实体:Employee和Team。正如您所猜测的,团队有0…*Employees。对它们进行建模的正确方法是什么 备选案文1: class Team{ List<Employee> members; } 这个选项不会加载太多不必要的Employees,但从建模的角度来看,可能(我不确定)不是一个好的设计 备选案文3: class Team{} class Employee{ Team team; } 在此选项中,我可以通过员工的属性查询团队的员工s。但我认为(
Employee
和Team
。正如您所猜测的,团队有0…*Employee
s。对它们进行建模的正确方法是什么
备选案文1:
class Team{
List<Employee> members;
}
这个选项不会加载太多不必要的Employee
s,但从建模的角度来看,可能(我不确定)不是一个好的设计
备选案文3:
class Team{}
class Employee{
Team team;
}
在此选项中,我可以通过员工
的属性查询团队
的员工
s。但我认为(我不确定)从建模的角度来看,员工
不应该知道如何组织,而且员工
是一个没有团队
就可以生存的实体
伙计们,你们觉得怎么样?第一个选择很简单&最好
class Team{
List<Employee> members;
}
班级团队{
成员名单;
}
您可以在Hibernate或许多其他JPA实现中设置批处理大小,以便在确实需要提取员工时,每次提取10名员工。这需要很少的时间来获取,并且Hibernate在您需要之前不会获取集合
“ID集”没有帮助——它不提供团队成员的姓名,也不会在您确实需要时加快加载速度
一般规则是,在需要之前不要进行优化
但是如果你需要的话,你可以考虑两个备选方案:
但是,作为一个“指示性的显示文本”,而不是一个权威性的价值,第二个选项会很好。 < P>你必须考虑的事实是,你不应该在你的团队中有成员在逻辑上是平等的(或者你想要1000个“代理史米斯的克隆人为你的团队战斗:-”)。 最好像这样对关系建模:
Set<Employee> members;
集合成员;
第一个,如果没有order和repeat元素,请使用set
而不是list
。Hibernate或其他JPA实现具有这种延迟加载功能,但它需要关系数据库。在非关系数据库的情况下,这种设计如何?不知道。您在问题中没有提到您的存储层,您仍然没有明确说明它是什么&您有或没有什么缓存/批处理获取功能。选项1)取决于缓存,选项2)与数据库和存储无关。
Set<Employee> members;