情景:
假设我必须构建一个与遗留数据库交互的网站。供应商不会很快被替换。性能是必需的,对于大多数表,我们只使用可能因查询而异的列子集,因此我们通常不会使用整个"实体"。
问题:
除了服务和演示之外,是否值得创建专用数据访问层?或者更准确地从服务层直接与JDBC交互以避免多个映射(在这种情况下为2)?
要点:
DAL< ---> BL< --->介绍 VS BL / DAL杂种< --->介绍
答案 0 :(得分:2)
是
在任何时候,最好将JDBC隐藏到专用数据访问层中。您也可以将其用作ACL(请参阅域驱动设计 - 反腐败层),它可用作映射器,以您希望的方式表示旧数据。
除了非常简单的CRUD数据库之外,通常数据库模型(也称为存储模型)不是域模型的1:1表示(您在应用程序中表示对象中数据的方式)。因此,我只需要几列和#34;问题在任何项目中都是完全有效的。
15年前,ORM地图制作者(例如Hibernate,Linq)开始提供一种方法来隐藏这种复杂性"来自开发人员的假象是您不需要考虑您的存储模型,并且可以从域模型推断出存储模型。然而,这个解决方案具有极其严重的性能损失 - DB架构师很容易理解,很难向大多数Java程序员解释:)5年前,领域驱动设计方法开始采取这种不那么紧张的方式,明确指出"相同"数据可以在不同的子系统中进行不同的建模(例如在数据库中),并且一切正常,因为我们可以将数据转换为我们的需求,即使数据来自XML或JSON,或者具有奇怪的列名或其他恶意。这种方法称为反腐败层(ACL) - 尤其是当你"翻译"在表示相同数据的不同系统之间。
在您的情况下,您可以执行更多操作,而不是将此数据访问层用作只有1:1将所有表列读入类的无脑DAO,您可以执行更多操作: