0

一个智能业务对象实际上可能包含来自多个数据库表的信息。构建业务对象可能需要多个数据库查询。但是,有时您不需要业务对象的完整信息。我是否需要再创建一个只包含业务实体基本信息的简单类?

我有一个部门的例子:

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;
}

要构造“部门”对象,我必须对不同的数据库表进行多次查询以获取成员、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
}

我应该选择哪种解决方案?

4

2 回答 2

0

由于成员只能属于一个部门。子部门也可以只属于一个部门——你在这里有一对多的关系。

存储这些实体的键列表很常见。如果需要,通过它们的 ID 获取这些实体。这种方法通常用于大表,例如在Google Appengine 实体中。

所以我建议有 1 个实体来存储成员和子部门的密钥。

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;
}
于 2013-07-06T09:38:35.867 回答
0

好吧,当我遇到这个问题时,我会根据类的常见用途采取不同的方法。如果我的应用程序中最常见的用途是最简单的定义类,那么我将我的类一分为二,并从最简单的中扩展最复杂的。如果最简单的使用不会如此普遍,那么我只使用复杂的,并将未使用的属性作为 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;
}

如果最简单的使用不会如此普遍,那么我只使用复杂的和 inicalice 作为 null 未使用的属性。在一个类中保留两个空属性不会占用你太多的内存。

于 2013-07-06T10:02:49.163 回答