我是否需要一个更简单的类来搜索复杂的业务实体?

时间:2013-07-06 09:15:25

标签: java performance business-objects

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

我有一个部门的例子:

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
}

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

2 个答案:

答案 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属性不会给你带来太多内存。