【发布时间】:2014-09-19 22:47:41
【问题描述】:
我正在编写我的第一个 Spring MVC webapp,并且有一个关于 DAO 和 web 服务请求的问题。
基本上,我的应用程序允许用户构建一个订单,该订单通过 DAO 持久化到数据库中。稍后,调度的工作人员将从数据库中检索新订单,将它们提交给第三方 SOAP 服务,并使用一些详细信息(例如订单号)更新每个订单。
我的控制器调用 OrderService(精简版):
@Service
public class OrderService {
@Autowired
private OrderDao orderDao;
public List<Order> getOrderList() {
List<Order> orders = orderDao.getAllOrders();
return orders;
}
public void addNewOrder(Order order) {
orderDao.addOrder(order);
}
}
OrderService 调用 OrderDao:
@Repository
public class OrderDao extends JdbcDaoSupport {
@Autowired
public OrderDao(DataSource dataSource) {
setDataSource(dataSource);
}
public List<Order> getAllOrders() {
String sqlQuery = "SELECT id, name, status, orderNumber FROM orders";
List<Order> orders = getJdbcTemplate().query(sqlQuery, new OrderRowMapper());
return orders;
}
public int addOrder(Order order) {
String sqlQuery = "INSERT INTO orders (name, status) VALUES (?, ?)";
getJdbcTemplate().update(sqlQuery, new Object[] { order.getName(), order.getStatus() });
return getJdbcTemplate().queryForObject("SELECT LAST_INSERT_ID()", Integer.class );
}
}
Order 模型如下所示:
public class Order {
private int orderId;
private String name;
private String status;
private String orderNumber;
// getters and setters etc.
}
目前我的 OrderDao 只与数据库通信以对 Order 模型执行 CRUD 操作。我不确定是否应该在 OrderDao 中创建一个 placeOrder() 方法,因为这意味着我有一个可以同时访问数据库和 SOAP 服务的 DAO,感觉不对。
将 placeOrder() 放在 OrderService 中也感觉不对,因为该服务将包含内部 DAO 调用和外部第三方 SOAP 调用的混合。
我一直在阅读接口,但我认为它们在这里对我没有帮助,因为我的数据库 DAO 将包含不适用于 SOAP DAO 的 create()、update()、delete()。
我是否应该只创建两个 DAO:OrderDaoDatabase 和 OrderDaoSoap?
【问题讨论】:
-
你的
placeOrder()和addOrder()一样吗?在代码中找不到。
标签: java spring-mvc design-patterns dao