【发布时间】:2018-10-10 13:57:10
【问题描述】:
我有一个包含三个实体的简单 Java 应用程序:
User
Rent
Tool
用户可以租用多个工具,并且工具可以被多个用户租用。 Rent 实体用于跟踪租金历史记录,因此它与用户和工具具有多对一的关系。
目前我有两个休息控制器: 用户控制器 工具控制器 负责为用户或工具提供服务。
问题是现在我想返回特定用户的租金历史记录。我应该在 UserController 中使用映射创建方法吗
/users/{id}/rents
或者最好创建单独的控制器,如 RentController 和带有映射的方法
/rents?userId={userId}
我认为第一种方法在 URI 方面更干净,但我必须在 UserController 中使用 RentService,因为这些是来自不同包的类(我使用按功能包的方法)我觉得有问题。 问题还在于 POST 或 PUT 等方法,我认为最好的选择是这样的:
POST /rents - RentDto as body
PUT /rents/{id} - RentDto as body
或者有方法也可以:
GET /users/{id}/rents
在 RentController 中而不是在 UserController 中? 你如何解决这些问题,你有什么建议?
【问题讨论】:
-
我将创建 RentController,并使用 CRUD 方法作为租金实体。这样,您就可以通过使课程保持单一目的来坚持 SOLID 原则。例如;。如果您必须检索工具的租金计数?您会向工具控制器添加另一种方法吗?这样用户和工具控制器都会有返回租金数据的方法,这并不完美。
-
Rent 表是否真的只包含两个实体之间的 manyToMany 关系,或者它可以扩展为包含一些额外的数据,例如租金特定信息?尽量避免让您的 UserResource/UserService 成为怪物,因为某些东西似乎在逻辑上适合那里。
-
它还包含其他数据,例如工具租用日期和用户归还工具的日期。
标签: java rest spring-mvc