gpt4 book ai didi

java - 服务层应该将对象或 ID 作为输入吗?响应应该是对象吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:55:28 26 4
gpt4 key购买 nike

我有一个相当熟悉的设计,其中每个模型都有一个 DAO,然后是一个使用 DAO 并在其中包含所有业务逻辑的模型服务类。

我对如何正确创建这些服务类感到有点困惑,具体来说,我的参数应该是什么以及我的响应应该是什么样的。

假设我有一个 JSON 操作,我可以读取 JSON,然后加载我需要的对象,然后将它们传递给服务,或者我可以简单地传递 ID,然后在服务方法中加载对象。

令人困惑的是,我可以在我的 Controller 操作中做其中一些事情,或者我可以在我的服务层中做这些事情。这些类型的问题是否有明确的答案?

伪代码如下:

UserDao
save
update
delete
getById

UserService
private userDao

GetUser
Update

我将在 Web 应用程序和 API 层中使用我的服务层。

我可以有这样的方法:

def GetSomething(userId: Int, locationId: Int, ...): Something = { ... }

或者我可以这样:

def GetSomething(request: GetSomethingRequest): GetSomethingResponse { ... }

是两者兼而有之,还是两者兼而有之?

最佳答案

首先,我认为对 id 使用案例类是一个很好的设计,所以将使用 UserId(id: Int)LocationId(id: Int)假设您有这样一个模型:User(id: UserId, locations: Set[Location])

然后假设您想要像 /user/1/location/1 这样的请求提供服务您的 Controller 需要通过返回 Location json 来处理这个问题。为了做到这一点,你需要1.通过id查找User(可能不存在->NotFound(user with id))2. 对于User 查找Location(可能不存在-> NotFound(location with id)

考虑到所有这些,您将需要一个服务:def find(userId: UserId):Option[User] = {...}。然后在您的 User 中添加一个函数来查找位置:def findLocation(id: LocationId): Option[Location]。推杆User 中的 findLocation 可防止所谓的“贫血模型”

对于更新,事情有点不同。您的 Location 可能会有自动更新的字段(例如:版本、状态等)。所以您将需要另一个类,例如:LocationData(它可以映射到表单、json 等)和方法 def update(data: LocationData): Location on 将应用更新的位置

关于java - 服务层应该将对象或 ID 作为输入吗?响应应该是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com