java - Spring MVC 域对象处理最佳实践

标签 java model-view-controller hibernate spring dao

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

你在哪里通过从数据库加载它来将领域对象的ID“转换”成领域对象?这不应该由 Controller 来完成。因此,服务方法接口(interface)必须使用接受域对象ID,而不是域对象本身。但是服务的接口(interface)如果以领域对象作为参数会更好。

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

最佳答案

Controller 应该将 id 向下传递到服务层,然后取回呈现其余 HTTP 响应所需的任何内容。

所以 -

Map<String,Object> doGet (@RequestParam("id") int id) {
     return serviceLayer.getStuffByDomainObjectId(id);
}

任何其他东西只会污染 web 层,它根本不应该关心持久性。服务层的全部目的是获取域对象并告诉它们执行它们的业务逻辑。因此,数据库调用应该驻留在服务层中 -

public Map<String,Object> getStuffByDomainObjectId(int id) {
    DomainObject domainObject = dao.getDomainObjectById(id);
    domainObject.businessLogicMethod();
    return domainObject.map();
}

关于java - Spring MVC 域对象处理最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1079708/

相关文章:

java - Hibernate Criteria API - 添加标准 : string should be in collection

java - 为什么我不能访问从 Java 的 StringTokenizer 返回的第一个标记?

php - Zend 框架 : How to construct a simple "Data Mapper" model?

java - 如何使用 Netbeans 将 jLabel 放在另一个 jLabel 之上?

model-view-controller - Play Framework : how to repopulate form on validation-failure when using datamodel?

razor - 编辑模式下的 Sitecore 下拉列表

java - Mockito 测试失败 : Actually, 与此模拟的交互为零

java - ClassCastException 与带有泛型的 java 列表迭代器

java - 在 Play Framework 中使用 WHERE 子句返回 List<Type>

java - 在路径中使用非法字符的 Windows 中使用 Java 访问文件