Java SpringMVC类设计的存储库

Java SpringMVC类设计的存储库,java,spring-mvc,model-view-controller,dao,dto,Java,Spring Mvc,Model View Controller,Dao,Dto,我有一个设计层面的问题。在我们的应用程序中使用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行中的每一行都将显示在不同的选项卡中。 对于视图中的每个

我有一个设计层面的问题。在我们的应用程序中使用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模型对象列表定义我的模式游戏


如果我们使用第二种方法,我们保存数据的方式会有任何变化。

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

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

我使用DTO和实体对象将API与数据库解耦。这需要更多的处理,但我发现额外的努力是值得的


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

这不是/or的参数:DAO和DTO是根本不同的东西。关于粒度的答案取决于您将数据保存在何处,其他人可能有权访问数据,以及您选择如何处理“脏读”。因为一个游戏可以有很多用户,所以当您在选项卡之间循环时,可能会有其他用户的更改。我建议为数据访问创建一个单独的REST服务。让UI独立于服务。首先,DTO不能与DAO对立,因为它们在应用程序的不同(独立)部分发挥作用。DTO将您的应用程序连接到外部世界。当
DAO
将应用程序连接到数据库时。可能您想问
DAO
vs
Repository
?或
存储库
聚合
?理解。我会纠正的。如果换个说法,我的问题是使用DTO最佳方法,还是只使用存储库来聚合我的表。