考虑到外观不应该有逻辑,将其传递给服务,这段代码是否正确使用了外观模式?我正在制作地图并对数据进行分组,并在需要它的其他服务中使用返回值。
public List<OrderOutput> checkout(ListOfOrderInput listOfOrderInput){
var orderList = listOfOrderInput.mapToOrderList();
var orderItems = orderList.stream()
.flatMap(order->order.getItems()
.stream())
.toList();
var groupedOrders = orderSupplyService.groupsOrders(orderList);
orderSupplyService.setsOrderListData(groupedOrders);
orderItemService.setItemsCode(groupedOrders);
itemAmountCalculatorService.calculateDesiredAmount(groupedOrders);
var ordersToInsert = orderService
.buildsDistinctOrderList(orderList);
orderSupplyService.registerOrderList(ordersToInsert);
orderItemService.registerOrderItems(ordersToInsert);
orderSupplyService.checkoutOrders(ordersToInsert);
var orderReturnList = orderReturnService.getOrderReturnList(ordersToInsert);
orderReturnItemService.buildsOrdersReturnItems(orderReturnList);
orderFacadeIntegration.sendCreatedOrders(orderReturnList.stream()
.map(OrderModel::mapToOrderIntegration)
.toList());
return orderReturnList.stream()
.map(OrderModel::mapToOrderOutput)
.toList();
}
我认为基于Facade模式可以解决的一个问题:
- 为了让复杂的子系统更容易使用,应该为子系统中的一组接口提供一个简单的接口。
它必然包含一定的逻辑。重塑数据以便将其传递给隐藏在外观下的对象是完全可以的。
另外我想说你不应该太担心名字——设计模式是一般原则,不完全遵循它们是完全可以的。主要目标是生产可维护和可重用的软件,虽然正确命名是有用的,但这不是目标。