Spring MVC 域对象处理最佳实践
-
21-08-2019 - |
题
让我们假设一个简单的 Spring MVC 控制器接收域对象的 ID。控制器应该调用一个应该对该域对象执行某些操作的服务。
在哪里通过从数据库加载域对象的ID将其“转换”为域对象?这不应该由控制器来完成。所以服务方法接口必须使用accept ID 的 域对象 而不是域对象本身。但是如果服务的接口将域对象作为参数,那么它会更好。
您对这个常见用例有何看法?你如何解决这个问题?
解决方案
控制器应该将 id 传递到服务层,然后返回呈现 HTTP 响应的其余部分所需的任何内容。
所以 -
Map<String,Object> doGet (@RequestParam("id") int id) {
return serviceLayer.getStuffByDomainObjectId(id);
}
其他任何事情都会污染网络层,而网络层根本不应该关心持久性。服务层的全部目的是获取领域对象并告诉它们执行业务逻辑。因此,数据库调用应该驻留在服务层中 -
public Map<String,Object> getStuffByDomainObjectId(int id) {
DomainObject domainObject = dao.getDomainObjectById(id);
domainObject.businessLogicMethod();
return domainObject.map();
}
其他提示
在我的一个项目中我使用了服务层:
class ProductService {
void removeById(long id);
}
我认为这取决于服务是远程的还是本地的。通常,我会尽可能将 ID 传递给远程服务,但更喜欢将对象传递给本地服务。
其背后的原因是,它通过仅向远程服务发送绝对必要的内容来减少网络流量,并防止对本地服务的 DAO 进行多次调用(尽管使用 Hibernate 缓存,这可能是本地服务的静音点)。
不隶属于 StackOverflow