违反DAO模式。该怎么办?

时间:2015-06-03 12:26:49

标签: java dao

我需要生成然后执行复杂的sql-query,它将访问多个数据库以创建一些通用的report。这意味着查询与特定的DAO对象无关。

那么我应该在哪里放置执行此类查询的逻辑并将结果返回为DTO?如果我创建ReportDao接口然后实现它可能会导致另一个开发人员遇到麻烦,因为我认为他们希望Dao对象与数据库中的某个表绑定。

1 个答案:

答案 0 :(得分:1)

!意见警告!

DAO不一定必须链接到特定的域类。没有域类独立存在,并且如果假定DAO仅包含一个表/域类上的操作,则一个令人惊讶,因为操作可能属于多个域类,因此无论放在何处都会被错误地放置它。最好还将DAO视为与某个功能区域相关的方法集合。如果大多数Dao都是围绕域对象建模的,那么将不同的Dao命名可能是明智的,但只要我们谈论与报告/报告相关的一系列方法,ReportDao就应该没问题。或许" GeneralReportDataDao"更好(请记住,我只有你的问题中的信息可以使用,考虑类代表什么,并尝试找到一个描述性名称..)

在域类之后组织DAO时我从经验中看到的另一点是,与中央域类相关的DAO往往会变得非常大,因为中央域类通常与大量功能相关联。这不仅适用于DAO类,也适用于服务等,使用相同的模式来组织功能。

我们主要有两种类型"在Java中的类中,我们有表示的类(包含数据的类,通常是有状态的类),以及的类(服务,dao等,通常是无状态类) )。有状态数据类应该按照它们所代表的内容(即数据)进行命名和建模,而无状态服务类应该在功能之后进行命名和建模。尽管尝试以与数据相同的方式组织服务很诱人,但它往往导致代码不佳,大型类和功能区域分布在多个类中。