2015-06-03 56 views
-1

我需要生成并执行一个复杂的sql查询,它将访问多个数据库来创建一些通用的report。这意味着查询与特定的DAO对象无关。违反DAO模式。该怎么办?

那么我应该把执行这样一个查询的逻辑和返回结果作为DTO?如果我创建了ReportDao接口,然后实现它,它可能会导致另一个开发人员陷入困境,我认为他们会希望Dao对象与数据库中的某个表绑定。

+0

它会在同一查询中访问多个数据库吗?或者使用多个数据库的结果? –

+0

@EvanKnowles是的,这将是一个'dblink'查询。 – user3663882

+0

项目中有很多决定可能会导致某些开发者陷入困境。与团队中的人员一起快速进行民意调查,看看他们的感受如何。具有多个数据源的单个DAO不是纯粹的邪恶,复合DAO也是合理的,因为聚合多个DAO的服务层也是如此。 –

回答

1

!意见警告!

DAO不一定必须链接到特定的域类。没有任何领域类是孤立存在的,如果我们假设一个DAO只包含一个表/域类的操作,就会有一个惊喜,因为操作可能涉及多个领域类,因此无论放在哪里都会被错误地放置它。最好还可以将DAO看作是与某个功能区域相关的一组方法。如果大多数Dao都是围绕域对象建模的,那么以不同的名称命名不同的报告可能是明智的,但只要我们讨论与报告/报告相关的方法集合,ReportDao就可以。或者,也许“GeneralReportDataDao”是更好的(请记住,我只有在你的问题的信息工作,想想什么类代表,并试图找到一个描述性的名称..)

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

我们主要有在Java类两个“类型”,我们有东西(服务,刀等,通常无状态类,代表东西(包含数据,通常状态类的类)和类类)。有状态数据类应该在它们表示的内容(即数据)之后进行命名和建模,而无状态服务类应该在功能之后进行命名和建模。虽然试图以与数据相同的方式尝试组织服务,但它往往会导致代码很差,大类和功能区域遍布几个类。