- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
场景:
假设我必须建立一个网站来与旧数据库交互。短期内不会更换供应商。性能是需要的,对于大多数表,我们只会处理列的子集,这些列的子集可能因查询而异,因此我们通常不会处理整个“实体”。
问题:
除了服务和表示层之外,是否值得创建一个专用的数据访问层?或者从服务层直接与 JDBC 交互以避免多重映射(本例中为 2)会更正确?
摘要:
DAL <---> BL <---> 演示文稿VSBL/DAL 混合 <---> 演示
最佳答案
是的。
始终将 JDBC 隐藏到专用数据访问层中是一个好主意。您也可以将其用作 ACL(请参阅域驱动设计 - 反腐败层),它用作映射器,以您想要操作的方式表示遗留数据。
除了极少数琐碎的 CRUD 数据库之外,通常数据库模型(也称为存储模型)不是域模型的 1:1 表示(在应用程序中以对象表示数据的方式)。因此,“我只需要几列”问题在任何项目中都是完全有效的。
15 年前,ORM 映射器(例如 Hibernate、Linq)开始提供一种向开发人员隐藏这种“复杂性”的方法,给人一种您不需要考虑存储模型的错误印象,而存储模型可以从领域模型中推断出来。然而,这个解决方案对性能造成了极其严重的影响——数据库架构师很容易理解,但对大多数 Java 程序员来说很难解释:)
5年前,领域驱动设计方法开始采取这种不那么紧张的方式,明确指出“相同”的数据可以在不同的子系统(例如在数据库中)中进行不同的建模,并且这一切都可以,因为我们可以将数据转换为我们的需要,即使数据来自 XML 或 JSON 或者具有奇怪的列名或其他邪恶的数据。这种方法称为反腐败层 (ACL) - 尤其是当您在表示相同数据的不同系统之间“转换”时,代码中的专用位置。
在你的例子中,你可以做更多的事情,而不是使用这个数据访问层作为一个无脑的 DAO,它只是 1:1 将所有表列读取到一个类中:
关于java - 在我的例子中是否值得创建一个数据访问层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987571/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!