单个DAO还是MVC中的多个DAO?

时间:2013-07-23 16:40:38

标签: model-view-controller dao

在一对多数据库映射方案中,假设一个部门可以拥有多个员工,设计DAO层的最佳做法是什么?

我是否应该有一个通用DAO类来获取/设置部门对象并获取/设置员工对象或两个单独的DAO类DepartmentDAO和EmployeeDAO来分别获取/设置部门对象和员工对象?

2 个答案:

答案 0 :(得分:0)

我会将其与部门的dao和Employee的另一个分开。我认为红旗是:你称之为合并道?

如果您的想法中没有立即出现清晰直观的名称,则可能是代码味道。如果这个名字没有突然出现,那肯定会让看看你代码的其他程序员感到困惑。为什么要把两件事情放在一起呢?

一些指导原则:

  1. 例如,如果是员工和承包商,我可能会更加相信将它们组合成一个通用的,但即便如此,我有可能将它们分开,除非我有充分的理由不这样做分开他们。

  2. 如果您的项目开始变得越来越大,有15或20个DAO,您可能最终决定转到一个DAO,但这是您可以做到下游的决定。那么也许你可以制作一个HumanResources DAO或类似的东西。这主要是为了防止过多的布线。

  3. 分离部门和员工几乎没有什么缺点,并且在维护代码的清晰度和易用性方面可能会有一些显着的提升。如果你有充分的理由,将来将它们结合起来并不难。

    这是我的看法。

答案 1 :(得分:0)

实际上,在我看来,你需要至少3种不同的DAO:

  • DepartmentDAO
  • EmployeeDAO
  • EmployeeCollectionDAO

事情是 - 单个实体的映射和实体组的映射具有显着差异。因此,它们应该由不同的结构处理,否则您可能会违反SRP

此外,Department应与Employee个实例的集合进行交互,而不是与每个实例分开进行。