Java 用于Web服务和数据库的单个DAO
我正在编写我的第一个SpringMVCwebapp,对DAO和web服务请求有一个问题 本质上,我的应用程序允许用户构造一个订单,该订单通过DAO持久化到数据库。稍后,计划工作人员将从数据库检索新订单,将其提交给第三方SOAP服务,并使用一些详细信息(例如订单号)更新每个订单 我的控制器调用OrderService(压缩版本): 目前,我的OrderDao只与数据库通信,以便对订单模型执行CRUD操作。我不确定是否应该在OrderDao中创建placeOrder()方法,因为这意味着我有一个可以访问数据库和SOAP服务的DAO,这感觉是错误的 将placeOrder()放在OrderService中感觉也不对,因为该服务将包含内部DAO调用和外部第三方SOAP调用的混合 我一直在阅读接口方面的内容,但我认为它们对我没有帮助,因为我的数据库DAO将包含create()、update()、delete(),这不适用于SOAP DAOJava 用于Web服务和数据库的单个DAO,java,spring-mvc,design-patterns,dao,Java,Spring Mvc,Design Patterns,Dao,我正在编写我的第一个SpringMVCwebapp,对DAO和web服务请求有一个问题 本质上,我的应用程序允许用户构造一个订单,该订单通过DAO持久化到数据库。稍后,计划工作人员将从数据库检索新订单,将其提交给第三方SOAP服务,并使用一些详细信息(例如订单号)更新每个订单 我的控制器调用OrderService(压缩版本): 目前,我的OrderDao只与数据库通信,以便对订单模型执行CRUD操作。我不确定是否应该在OrderDao中创建placeOrder()方法,因为这意味着我有一个可以
我是否应该创建两个DAO:OrderDaoDatabase和OrderDaoSoap?使用分层架构的目的是鼓励解耦和分离关注点。您已经有了负责业务逻辑的服务层和与数据库通信的数据访问层(DAOs),这似乎是正确的。OrderService应该与数据库对话,OrderDAO应该与数据库对话 您的计划工似乎是另一个类。OrderDAO可以通过不同的方法(应用程序需要这些方法)公开订单数据。如果
placeOrder()
是对外部web服务的调用,则可以从OrderService中的适当方法或其他类(如果需要)调用它。现在,由于该调用在调用addOrder()
时没有完成,因此它可能属于调度程序调用的另一个方法。另一方面,我不认为placeOrder()
应该进入OrderDAO
,它应该留给它所说的数据访问对象。您的placeOrder()
与addOrder()
相同吗?在代码中找不到它。
@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);
}
}
@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 );
}
}
public class Order {
private int orderId;
private String name;
private String status;
private String orderNumber;
// getters and setters etc.
}