当我想要更新非简单域对象时,我在组织代码时遇到问题.问题是分离控制器和服务层的职责.
更明确地,假设我们有一个域类Client,它依赖于其他域类,如Address等.
在视图中有一个用于编辑某些Clients属性的gsp,包括一些嵌套属性,如Address上的street.
当我想更新这些字段时,我在Controller上调用update方法(在本例中为ClientController).
我喜欢在验证时来自域类错误的功能.就像我在控制器中写道一样
Client client = Client.get(params.id)
client.properties = params
client.validate()
Run Code Online (Sandbox Code Playgroud)
如果客户端现在有错误,则很容易在编辑视图中显示它们.
但是,我认为更新,保存和从数据库(Client.get(theId))获取客户端应该由服务层处理.在我的情况下,我必须在更新客户端之前更新或创建其他域对象(如地址).
所以我的一个问题是API应该如何看待服务层?
public ... updateClient(…)
Run Code Online (Sandbox Code Playgroud)
在文献中,他们有一个简单的例子来更新一个人的年龄.因此,他们的API由人的身份和新时代组成.但是,在我的情况下,我从视图中得到大约十个参数,它们只是客户端所有属性的子集,我不知道哪一个已经改变了.
我该如何结合这些?不同层面对更新有哪些责任?关于更新,服务层的API应该如何?
如果在某个地方有一个很好的参考实现,我会很乐意研究它.很多时候,服务层不幸被完全或部分忽略.