【问题标题】:Java Architecture - Self managed classes vs Manager classesJava 体系结构 - 自管理类与管理器类
【发布时间】:2014-12-17 06:55:59
【问题描述】:

我正在使用 Spring 和 Hibernate。

我使用的休眠模型是“NodeInstanceLog”,它是从数据库中检索的对象。

我目前的结构:

目前,NodeInstanceLogDAO 正在处理从数据库中检索数据。

另一种选择是更改我的结构以使其成为可获取的 NodeInstanceLog 并使其自行管理。即能够从数据库中检索其数据。

各有什么优缺点?

【问题讨论】:

    标签: java jakarta-ee architecture structure


    【解决方案1】:

    这是一个关注点分离的问题。模型代表您的问题域的一部分,而 DAO 关注的是数据进出数据存储。两个完全不同的问题,需要专门的课程。

    一般来说,你的职责划分得越多,你的代码库就越模块化,有很多优点: * 我们的大脑倾向于一次只专注于一件小事,因此阅读(=维护)您的代码会更容易,因为它更有条理。 * 当不同的职责在小类中分离时,测试更容易:一个测试一次可以操作一个简单的重点类 * 更有可能重用:如果您想对与 DAO 无关的模型实例做其他事情,那么其中的 DAO 代码将被拖入您想要做的其他事情中

    无论如何,可能还有很多话要说。尝试在谷歌上搜索“关注点分离”、“松散耦合”……但从我这里开始吧:分担责任是要走的路:)

    【讨论】:

    • 所以你的意思是,拆分职责,让 NodeInstanceLog 只保存它的数据,而不是获取自己是你的方式吗?
    【解决方案2】:

    在纯 java 中,使用 DAO / Repositories 通常会更好,否则您的对象将需要有相当多的数据库逻辑。数据库逻辑不是业务逻辑,您的模型应该只代表业务模型。

    Play 是一个框架,它可以将大量持久性逻辑自动编织到您的类中(使用方面),这样您的模型类就有查询数据库的方法,但它没有逻辑。

    如果您正在学习这些东西,我建议您同时实现这两种解决方案并体验每种解决方案带来的痛苦(例如,您如何处理事务?您从哪里获取数据库连接?)

    我还建议您阅读 Patterns of Enterprise Application Architecture 这本书,尤其是 Active Record(将逻辑编织到您的类中)和 Unit of Work (Hibernate)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多