【问题标题】:single responsibility for Order Model or ProductService?Order Model 或 ProductService 的单一职责?
【发布时间】:2020-10-20 06:23:32
【问题描述】:

对于单一职责问题,我应该将 ProductService 传递给 Order model 类还是 addProducts 方法?或者应该怎么做?

在订单中添加新产品时,需要通过ProductService类获取产品信息

addProducts 方法负责检查数据库中是否已经存在 Products,如果存在则更新 Qty,它会从 ProductService 类中获取产品信息,然后将产品信息添加到数据库中。

用法:

const Order = new OrderModel(request.OrderId); 

// Update Qty on existing products in Db or Add New Products in db
Order.addProducts([
    { ProductId: 111, Qty: 1 }, // new item 
    { ProductId: 222, Qty: 2 }  // existing item, set from 1 to 2 Qty in db
])


class ProductService {
    getProduct(productId) {
       return {} //fetch product info via API
    }
}

【问题讨论】:

    标签: javascript node.js oop


    【解决方案1】:

    您对Order 实例进行的每个方法调用都将依赖于同一个ProductService 实例,因此将ProductService 作为参数传递给构造函数而不是作为addProducts 方法。

    如果ProductService 是通用的,这意味着所有单独的Order 实例共享同一个ProductService 实例,那么您可以使用辅助函数来创建Order。在您实例化 ProductService 的任何根文件中,您都可以导出一些了解该实例的工厂函数。

    export const service = new ProductService();
    export const createOrder = (orderId) => new Order(service, orderId);
    

    这样Order 类仍然与ProductService 类分离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多