我使用Express.js作为我的Web框架,并使用Objection.js作为我的ORM,以避免胖控制器并坚持单一责任原则,我创建了多个服务对象来执行一些业务逻辑,并且该服务对象旨在可重用。例如,我有几种订单类型,所以我创建如下服务对象:
CreateSimpleOrderService.js
class CreateSimpleOrder {
call(params) {
// create order
}
}
CreateOrderDetailService.js
class CreateOrderDetail{
async call(orderId, params) {
// create order details
}
}
FormatOrderForResponse.js
class FormatOrderForResponse {
async call(order) {
// format order
}
}
这种方式效果很好,但是现在我有两个问题
例如,当我调用 FormatOrderForResponse 服务时,如果我将order参数作为对象传递,那么我最终可能会得到没有加载某些必需关系的order对象,那么我就不会偷懒正在加载,但我无从得知。如果我在将所需的关系发送到服务之前预加载了所需的关系,并且有一天需要更改格式方法并且需要加载另一个关系。我将需要为每个查询更改急切的加载代码,以获取格式类使用的对象。
如果我传递ID,那将是完美的,因为我可以使用所需的关系再次从数据库中获取对象。但这不会对每个从数据库重新加载对象的方法造成性能问题吗?
请告诉我您对问题的看法以及更好的解决方案。
谢谢。