在一对多的数据库映射场景中,假设一个部门可以有多个员工,那么设计 DAO 层的最佳实践是什么?
我应该使用一个通用 DAO 类来获取/设置部门对象和获取/设置员工对象,还是使用两个单独的 DAO 类 DepartmentDAO 和 EmployeeDAO 来分别获取/设置部门对象和员工对象?
在一对多的数据库映射场景中,假设一个部门可以有多个员工,那么设计 DAO 层的最佳实践是什么?
我应该使用一个通用 DAO 类来获取/设置部门对象和获取/设置员工对象,还是使用两个单独的 DAO 类 DepartmentDAO 和 EmployeeDAO 来分别获取/设置部门对象和员工对象?
实际上,在我看来,您至少需要 3 个不同的 DAO:
DepartmentDAO
EmployeeDAO
EmployeeCollectionDAO
事情是 - 单个实体的映射和实体组的映射具有显着差异。因此,它们应该由不同的结构处理,否则您有违反SRP的风险。
此外,Department
应该与Employee
实例集合交互,而不是单独与每个实例交互。
我会用一个 dao 来区分 Department 和另一个 Employee 。我认为红旗是:你会怎么称呼合道?
如果一个清晰直观的名称没有立即出现在您的脑海中,则可能是代码异味。如果这个名字没有跳出来,它肯定会让其他看你代码的程序员感到困惑。为什么要把两个截然不同的东西粘在一起?
一些指导方针:
例如,如果是 Employee 和 Contractor,我可能会更加相信将它们组合成一个泛型,但即便如此,我还是有可能将它们分开,除非我有充分的理由不分开它们。
如果您的项目开始变得庞大,有 15 或 20 个 DAO,您可能最终决定使用一个 DAO,但这是您可以在下游做出的决定。然后也许你可以创建一个 HumanResources DAO 或类似的东西。这主要是为了防止接线过多。
将部门和员工分开几乎没有什么坏处,而且在代码的清晰度和易于维护方面可能会有一些显着的收益。如果您有充分的理由,将来将它们结合起来并不难。
这是我的看法。