【问题标题】:Repository for Spring MVC Class designSpring MVC 类设计的存储库
【发布时间】:2018-08-13 13:59:30
【问题描述】:

我有一个设计层面的问题。在我们的应用程序中使用 DAO 或 DTO 之间存在争议。

我浏览了现有的帖子并了解到 DTO 仅在表示复杂对象时使用。但是,我的视图可以仅使用我的表上的连接操作来生成。

数据库:

表格:

game
game_details (has a primary key of Game) - There will be at max 4 rows for a given game_id

我的视图包含桌游和游戏详细信息中的所有列。这 4 行中的每一行都将显示在不同的选项卡中。 对于视图中的每次更改,都有 3/4 的概率更新两个表。

现在最好的方法是什么。 1. 将整个视图包装为 DTO。 2. 或者用 GameDetails 模型对象列表定义我的模式 Game。

如果我们采用第二种方法,我们持久化数据的方式是否会有任何变化。

【问题讨论】:

  • 这不是非此即彼的论点:DAO 和 DTO 是根本不同的东西。关于粒度的答案取决于您将数据保存在哪里,还有谁可以访问它,以及您选择如何处理“脏读”。由于一个游戏可以有许多用户,因此当您在选项卡之间循环时,其他用户可能会发生变化。我建议为数据访问创建一个单独的 REST 服务。让 UI 独立于服务。
  • 首先,DTO 不能与 DAO 对立,因为它们在应用程序的不同(和独立)部分中发挥作用。 DTO 将您的应用程序连接到外部世界。当DAO 将应用程序连接到数据库时。可能你想问DAORepository?还是Repository vs Aggregate?
  • 明白。我会纠正的。如果换个说法,我的问题是使用 DTO 最佳方法或仅使用存储库来聚合我的表。

标签: java spring-mvc model-view-controller dao dto


【解决方案1】:

数据访问对象就是这样做的。他们如何做到这一点取决于您使用的技术;我喜欢 Hibernate 进行 CRUD 操作。

我使用术语数据传输对象来指代描述我的 API 的对象。因此,我将定义与我在 RESTful 服务中传递的 JSON 相匹配的 DTO。

我使用 DTO 的 实体对象将我的 API 与我的数据库分离。它涉及更多处理,但我发现额外的努力是值得的。

如何定义 DTO 取决于您自己,这取决于您如何描述在服务 API 中传递的数据。使用 JDBC 填充扁平结构更简单;但是,它通常包含大量冗余数据,需要更多的逻辑来处理。一种结构化方法,其中标头包含详细信息列表,可能需要更多的工作来填充,但它避免了冗余并且更易于使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多