我最近读到调用类 **Manager* 是一件坏事,因为它们的名称不准确,并且它们可能成为上帝的对象。但是,为处理同一业务对象的不同类的多个不同方法提供“Manager”作为包装器是否是一种好习惯?
假设我的调用者想要与订单交互。将各种方法混合到一个 **Manager* 类中是否更好,该类只会将它们委托给适当的类,或者让调用者自己使用适当的类。
所以
OrderManager orderManager = new OrderManager();
orderManager.cancelOrder(order); -> delegates to OrderShredder
orderManager.sendOrder(order, destination); -> delegates to OrderSender
或者
new OrderShredder().cancelOrder(order);
new OrderSender().sendOrder(order, destination);
那些比简单委托更多的类呢(它们使用多个委托,以正确的顺序执行它们或根据委托的某些结果选择下一条路径)。这些类型的方法(如下所示)可以在某种管理器类中吗?
public Order makeOrder(List<Product> products, Customer customer) {
BigDecimal orderValue = this.productPriceCalculator.calculatePrice(products, customer);
Order order = this.orderCreator.createOrder(products, customer, orderValue);
boolean orderIsOk = this.orderValidator.validate(order);
if (orderIsOk) {
OrderStatistics orderStatistics = this.orderEvaluator.evaluate(order);
boolean orderValueIsBigEnough = orderStatistics.isValueBigEnough();
if (orderValueIsBigEnough) {
this.orderSender.sendInformationAboutOrderSomewhere(order, orderStatistics);
}
}
else {
throw OrderNotOkException(order);
}
return order;
}
public void cancelOrders(Customer customer) {
List<Order> customerOrders = this.ordersStorage.getOrders(customer);
for (Order order : customerOrders) {
orderShredder.cancelOrder(order);
}
}