一个智能业务对象实际上可能包含来自多个数据库表的信息。构造业务对象可能需要多个数据库查询。但是,有时您不需要业务对象的完整信息。我是否需要创建一个仅包含业务实体基本信息的简单类?
我有一个部门的例子:
public class Department {
String name;
String description;
//have to query other Table to get headOfDepartment
Employee headOfDepartment;
//have to query other table to get members
List<Employee> members;
//have to query other table to get subDepartments.
List<Department> subDepartments;
}
要构造“Department”对象,我必须对不同的数据库表进行多次查询才能获得成员,headOfDepartment和subDepartments。
如果我只想列出所有部门,实际上我不需要“成员”,“headOfDepartment”和“subDepartments”。我需要的是每个“部门”的“名称”和“描述”。
在这种情况下,我有两个解决方案:
1)创建一个名为SimpleDepartment的类,如:
public class SimpleDepartment {
String name;
String description;
}
2)使用部门,但不提供完整信息。 这样,“部门”对象可能包含以下数据:
Department{
name:"CCS"
description : "CCS is under CEO office to help CEO handling emails."
headOfDepartment : null
members : null
subDepartments : null
}
我应该选择哪种解决方案?
答案 0 :(得分:0)
由于会员只能属于一个部门。子部门也可以只属于一个部门 - 这里你有一对多的关系。
存储这些实体的密钥列表很常见。如果需要,可以通过ID获取这些实体。这种方法通常用于大表,例如Google Appengine entities。
所以我建议有一个实体存储成员和子部门的密钥。
public class Department {
String name;
String description;
//have to query other Table to get headOfDepartment
Employee headOfDepartment;
//have to query other table to get members
List<Employee_Ids> members;
//have to query other table to get subDepartments.
List<Department_Ids> subDepartments;
}
答案 1 :(得分:0)
好吧,当我面对这个问题时,我会根据类的常用用法采取不同的方法。 如果我的应用程序中最常见的用法是最简单的定义类,那么我将我的类分成两部分,并从最简单的方面扩展最复杂的类。 如果最简单的使用不会如此常见,那么我只使用复杂的和inicialice作为null未使用的属性。我这样做是为了让我的代码尽可能干净。
public class Department {
String name;
String description;
}
public class DepartmentComplex extends Department{
//have to query other Table to get headOfDepartment
Employee headOfDepartment;
//have to query other table to get members
List<Employee> members;
//have to query other table to get subDepartments.
List<Department> subDepartments;
}
如果使用最简单的东西不会那么常见,那么我只使用复杂的和inicialice作为无效属性的null。在类中保留两个null属性不会给你带来太多内存。