正如我提到的题目,我很感兴趣知道你怎么(作为经验丰富的开发人员)认为有关使用的道的模式,具体内的网络应用程序。什么优势你有没有发现什么后果,其使用有你不喜欢?

有帮助吗?

解决方案

与我看到的DAO存在的问题是它们通常处理全对象的所有的时间。这将创建一个不会与简单的查询存在完全不必要的开销。例如,如果一个下拉将被关闭数据库引用数据的创建,一个DAO用户可以简单地说:“给我这个表对象,其中y为z有序的集合”。然后,这些数据可以在下拉菜单中使用,但通常只为一个键/值组合,忽略物体一切(创建数据,最后用户更新它是谁,它是否是活动的,等等),这是检索和映射。即使这个按摩发生在DAO呼叫附近的对象没有得到存储,因为它们是获得(这通常不是这样的,不幸的是,对象通常包裹在AC:的forEach(JSP)和遍历产生下拉),但它仍然造成不必要的数据库和网络开销,更不用说在存储器中的临时增加以保持这些对象。

现在,这是不是说,一个DAO不能设计检索引用数据的地图 - 它当然可以。但通常情况下,他们已经习惯了完整的对象映射,这是不被需要的所有的时间。它是在保存时的实力,但一个弱点,国际海事组织,检索数据时 - 当然,你得到这一切 - 但往往你不需要这一切,它只是浪费内存,带宽和时间

其他提示

注:你可能会找到的其他缺点,但这是一个快速列表从我的经验

赞成:

  • 共同呼吁取的对象。
  • 一旦你有一般的创建/read/update/delete流动设置的,一般的布局可重复用于其他Dao.
  • 它也巩固那里的持久性的特定部分的你的代码可以走了。分开的商务逻辑的从其他组成部分。

缺点:

  • 它不是最灵活的事情。
  • 如果你想要偷懒载有些儿童目的,如果答案是肯定的,那么你将来要么相互融合的Dao与其他层或采取预防措施时,尝试以检索的懒惰的对象。
  • 如果你手写的Dao,那么代码可以成为繁琐和重复的。

福利的使用道的设计图案

道或数据访问目的设计图案是一个很好的例的抽象和封面向对象的原则。它分离的持久性逻辑是一个单独的层称为数据存取层,其使用作出反应的安全改变在持久性的机制。例如,如果转移文件的基础持久性的机制数据库,改变将是有限的数据存取层,并不会影响业务层或领域对象。数据访问的对象或道图案是相当多的标准Java应用程序是它的核心Java,网络应用程序或企业应用程序。以下是几更多的利益使用道图案在Java应用程序:

enter image description here

  1. 道设计图案也保持联低之间的不同部分的应用。通过使用道的设计图案你看层完全独立的道层和服务层具有依赖于它,这也是抽象的,通过使用道口。

  2. 道设计图案允许JUnit测试用运行得更快,因为它允许以创建模拟和避免连接的数据库,运行测试。它提高了测试,因为它很容易编写测试与模拟对象,而不是一个一体化试验的数据库。在任何问题的情况下,同时运行单位测试中,只需要检查代码并且没有数据库。还盾牌与数据库连接和环境问题。

  3. 由于道图案是根据接口,它还促进面向对象的设计原则"编程接口比执行情况",其结果在柔性和质量的代码。

DAO模式的力量是它们允许创建实际的存储系统的一个很好的抽象层。它们提供了持久层的更面向对象的视图和结构域和将实际执行数据访问(直JDBC,持久性框架,ORM甚至JPA)代码之间的清晰分离。

如果我举一个弱点,好了,我会说这是另一层......但我想这是支付给不配合你的代码底层持久化API的价格。

我们已经看到一些真正的好处在介绍一道模式为我们的执行情况。这主要是由于明确分之间的数据库的界面和执行。我们已经观察到以下好处:

  • 抽象化对于实际的数据库的访问执行分开数据访问策略,从用户的业务逻辑。这使我们能够选择一个短期(Spring JDBC模板)执行战略的项目初始阶段选择移动到路由相关配置或休眠状态,在稍后的日期。(一的选择,我们不能使在这个时候。)
  • 分离引入了重要的可测性的好处在于,整个数据访问的实现可以嘲笑出来在单元的测试。(这是可能的最大利益)
  • 结合这春天我们可注入任何数据库实现成的系统,我们选择(尽管这可能说更多关于二比一道图案)。

一个问题,我们所遇到的,这可能是由于缺乏清晰度的设计对我们的一部分是"倾斜",以重复使用的数据的价值的对象出版的数据库作为转让对象之间随后的抽象层的建筑。我们的解决方案之后的一些痛苦是有价值的对象每层(即为不再使用的数据库的价值的对象,在随后的建筑层)。

PRO

  • 单点定义的数据库表对象的属性映射
  • 透明的可能性对于道实现其他储存的类型
  • 开发一个接口模式的所有道的后续行动
  • 发展中或多或少有标准JUnit测试类道的结果更好测试的复盖范围
  • 完全控制的具体细节
  • 没有性能损失是由于一个过分的通用解决方案

CON

  • 不"性感"比使用最新的框架
  • 开发者不让去创造自己的轮子(可能是一个临:-))

如同大多数的发展模式,使用道是需要一些时间用来获取。与的经验来的好处更加强大的代码和开发,知道为什么工作的事情,不只是它似乎。最后一点是最大的优点给我。

警告,这取决于你的情况下使用的持久性框架可能是一个很好的替代码你自己的道的。

什么替代你考虑?

这似乎很明显,将持久性比某处表现层其他责任通常会不错,只是从责任和重用的清晰度的参数。我本能地去一个三层的方法:演示,服务,持久性。承认自己已经这样做了这么久,我不能aduce通过没有做这样的说法遭受疼痛的证据。到我来说,似乎“明显的”具有其理解持久机制必须简化测试,便于维修和给予的关注的良好分离的单层。

所以离开的究竟是如何做到持久层的问题。我默认的假设是使用JPA(或类似的框架)。我认为这是DAO的一个复杂的例子。

所以我看到DAO的两项费用。首先,你需要投资在你的程序结构,它的设计。对于琐碎的情况下,这可能会觉得大材小用。其次,如果你使用DAO实现对你有一个学习曲线的框架。只需编写JDBC代码直接比较,这是另一种投资。

临:抽象分离结果。 缺点:样板代码(感谢神码发生器/模板和ORM的)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top