Spring MVC域对象处理最佳实践

时间:2009-07-03 14:53:20

标签: java model-view-controller hibernate spring dao

让我们假设一个简单的Spring MVC Controller接收域对象的ID。 Controller应该调用应该对该域对象执行某些操作的服务。

通过从数据库加载域对象的ID,将域名对象的ID“转换”到哪里?这不应由财务主任完成。因此,服务方法接口必须使用接受域对象 ID 而不是域对象本身。但是如果将域对象作为参数,则服务的接口会更好。

您对此常见用例有何看法?你是如何解决这个问题的?

3 个答案:

答案 0 :(得分:4)

控制器应该将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();
}

答案 1 :(得分:2)

在我的一个项目中,我使用了服务层:

class ProductService {

    void removeById(long id);

}

答案 2 :(得分:2)

我认为这取决于服务是远程服务还是本地服务。作为一项规则,我尝试尽可能将ID传递给远程服务,但更喜欢本地对象。

这背后的原因是它通过仅向远程服务发送绝对必要的内容来减少网络流量,并防止对本地服务的DAO多次调用(尽管使用Hibernate缓存,这可能是本地服务的静音点)。 p>