假设我们有一个Order类和一个方法,其中有services个类和方法生成一系列操作
fun doStuff(order: Order): Order {
val orderByServiceA = serviceA.operationA(order: Order)
val orderByServiceB = serviceB.operationB(orderByServiceA: Order)
val orderByServiceC = serviceC.operationC(orderByServiceB: Order)
return orderByServiceC
}
我创建了一个可以由服务实现的公共接口
interface IOrderService {
fun operation(order: Order): Order
}
因此,上述方法成为
fun doStuff(order: Order): Order {
val orderByServiceA = serviceA.operation(order: Order)
val orderByServiceB = serviceB.operation(orderByServiceA: Order)
val orderByServiceC = serviceC.operation(orderByServiceB: Order)
return orderByServiceC
}
这段代码中有一些重复,所以下一步是使这个函数打开以进行扩展,关闭以进行修改.
fun doStuff(order: Order): Order {
orderServices.forEach { service ->
service.operation(order)
}
...
}
这个解决方案非常好,因为如果我想添加另一个实现operation function的服务,这很容易做到.
但有一个问题..最后一个解决方案中传递的order对象对于所有服务都是相同的,因此提出的解决方案与第一个实现不同.
所以我在这一点上很困惑,因为我想找到一个干净的解决方案..
对完成最后一段代码有什么建议吗?谢谢!