Java 我应该设计JSF页面bean调用多个facade还是单个facade来与系统中的多个模块交互?
我正在阅读一个系统的代码,并试图理解服务层的设计 我注意到,对于每个对象(要保存到数据库的实体),将创建一组相关的类/实现,如下所示:Java 我应该设计JSF页面bean调用多个facade还是单个facade来与系统中的多个模块交互?,java,design-patterns,service,Java,Design Patterns,Service,我正在阅读一个系统的代码,并试图理解服务层的设计 我注意到,对于每个对象(要保存到数据库的实体),将创建一组相关的类/实现,如下所示: Product.java ProductDAO.java(接口类) ProductDAOImpl.java ProductService.java(接口类) ProductServiceImpl.java 基于购物车示例,对于客户购买的每个产品,我都必须执行以下事务: 减少产品的数量 保存订单 为批处理作业创建通知记录,以发送电子邮件通知客户 我应该如何设计/实
比如说,今天,您只为您的桌面网站实现了(下单)功能。将来,如果你需要在你的Android应用程序中添加相同的内容,如果你使用方法2,你将能够重用ShoppingCartService。如果使用方法1,则必须在应用程序中复制业务逻辑。正如ketan所说,我更喜欢方法2,但我想就为每个实体创建服务层发表一些评论 尽管还有其他选择,但为每个实体创建一个DAO是一个好主意。然而,我并不认为为每个实体创建一个服务类(或接口+实现对) 这样做,您将是多余的,有时会对必须使用哪个服务类感到困惑。在开发服务层时,您必须关注必须实现哪些功能 例如,如果您有
订单
、产品
和客户
实体,那么您可能只需要ShoppingManager
服务类,实现与购物功能相关的方法,例如创建新订单、修改订单、检索客户订单等等
让一个管理器或服务类调用另一个管理器或服务类并没有什么错,但我认为避免这种情况是明智的,并且开发只调用DAO、代理、WS/REST等的服务类。在这种情况下,ProductService、OrderService、NotificationService不会变得多余,如果每个模块实现自己的服务层?“如果每个模块实现自己的服务层”等同于“ProductService、OrderService、NotificationService”,即产品、订单或通知的不同服务。。我不明白你的问题,如果我在我的网站上开发5种类型的服务,即A、B、C、D、E,并且我为每种类型实现一个服务类,即ServiceAImpl、ServiceBImpl等,ProductService、OrderService、NotificationService是否会变得多余?
public class ShoppingCartPageBeanA {
private ProductService productService;
private OrderService orderService;
private NotificationService notificationService;
public void submit() {
productService.decreaseProductTotalQuantity(product);
orderService.saveOrder(order);
notificationService.saveNotification(notification);
}
}
public class ShoppingCartPageBeanB {
private ShoppingCartService shoppingCartService;
public void submit() {
shoppingCartService.saveOrder(order);
}
}
public class ShoppingCartServiceImpl {
private ProductDAO productDAO;
private OrderDAO orderDAO;
private NotificationDAO notificationDAO;
public void saveOrder(Order order) {
productDAO.decreaseProductTotalQuantity(order.getProduct);
orderDAO.saveOrder(order);
notificationDAO.saveNotification(order.getNotification);
}
}