使用DAO模式的利弊[已关闭]

正如我在标题中提到的,我很想知道你(作为经验丰富的开发人员)对DAO模式的使用有什么看法,特别是在Web应用程序中。您发现了哪些优势,以及您不喜欢使用它的哪些后果?


答案 1

我所看到的DAO的问题在于它们通常一直处理完整的对象。这会产生完全不需要的开销,而这些开销在简单查询中是不存在的。例如,如果要从数据库引用数据创建下拉列表,DAO 用户可能只是说:“给我获取此表的对象集合,其中 y 按 z 排序”。然后,该数据在下拉列表中使用,但通常仅用于键/值组合,忽略检索和映射的对象(创建的数据,更新它的最后一个用户,它是否处于活动状态等)中的其他所有内容。即使这种处理发生在DAO调用附近,并且对象在检索时不会被存储(不幸的是,通常情况并非如此,对象通常被包装在c:forEach(JSP)中并迭代以产生下拉列表),它仍然会创建不需要的数据库和网络开销,更不用说临时增加内存来保存这些对象了。

现在,这并不是说DAO不能被设计为检索参考数据的地图 - 它当然可以。但通常它们用于完整的对象映射,这并不是所有时候都需要的。在保存时,这是一个优势,但是IMO在检索数据时是一个弱点 - 当然,您可以获得所有数据 - 但通常您不需要所有数据,它只会浪费内存,带宽和时间。


答案 2

注意:您可能会发现其他缺点,但这是我的经验的快速列表

优点:

  • 检索对象的常见调用。
  • 设置常规创建/读取/更新/删除流后,可以对其他 DAO 重复常规布局。
  • 它还整合了代码的持久性特定部分可以去的地方。将业务逻辑与代码的其他组件分开。

缺点:

  • 这不是有史以来最灵活的事情。
  • 如果要延迟加载一些子对象,则必须将 DAO 与其他层混合在一起,或者在尝试检索惰性对象时采取预防措施。
  • 如果您手写DAO,则代码可能会变得乏味和重复。

推荐