Bla*_*man 5 java scala playframework
我有一个相当熟悉的设计,每个模型都有一个DAO,然后是一个使用DAO的Model服务类,其中包含所有业务逻辑.
关于如何正确创建这些服务类,我有点困惑,特别是我的参数应该是什么以及我的响应是什么样的.
假设我有一个JSON操作,我可以读取JSON,然后加载我需要的对象然后将它们传递给服务,或者我可以简单地传入ID,然后在服务方法中加载对象.
令人困惑的是,我可以在我的控制器操作中执行其中的一些操作,或者我可以在我的服务层中执行此操作.对这些类型的问题有明确的答案吗?
下面的伪代码:
UserDao
save
update
delete
getById
UserService
private userDao
GetUser
Update
Run Code Online (Sandbox Code Playgroud)
我将在Web应用程序和API层中使用我的服务层.
我可以有一个像这样的方法:
def GetSomething(userId: Int, locationId: Int, ...): Something = { ... }
Run Code Online (Sandbox Code Playgroud)
或者我可以这样:
def GetSomething(request: GetSomethingRequest): GetSomethingResponse { ... }
Run Code Online (Sandbox Code Playgroud)
它是一个还是另一个,还是我应该混合两者?
小智 0
首先,我认为使用 ids 的案例类是一个很好的设计,所以将使用UserId(id: Int),LocationId(id: Int)
让我们说你有一个这样的模型:User(id: UserId, locations: Set[Location])
然后假设您想要提供请求,例如/user/1/location/1
您的控制器需要通过返回Locationjson 来处理此请求。为此,您需要 1.User按 id 查找(可能不存在 -> NotFound(具有 id 的用户)) 2. 查找User(Location可能不存在 -> NotFound(具有 id 的位置)
考虑到所有这些,您将需要一项服务:def find(userId: UserId):Option[User] = {...}。然后在您User添加一个函数来查找位置:def findLocation(id: LocationId): Option[Location]。放入
findLocation可User预防所谓的“贫血模型”
对于更新来说,事情有点不同。您Location可能会有自动更新的字段(例如:版本、状态等)。因此,您将需要另一个类,例如:(LocationData它可以映射到表单、json 等)以及一个def update(data: LocationData): Location将 Location应用更新的方法。
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |