让我尝试针对您的两个模块(模块 A 和 B,它们都运行相同的服务接口 ISaleAppService)的情况提出一个解决方案,它们具有相同的接口(IUnitOfWork)和不同的实现细节实体类。
因此,假设它是一个交付应用程序。
模块 A 使用摩托车交付 DeliveryServiceA : IUnitOfWork { // 使用摩托车尽快交付 }
模块 B 使用卡车交付 DeliverServiceB : IUnitOfWork { // 使用卡车尽可能地交付 }
消费者,比如说 ISaleAppService,购买了服务,现在,假设消费者不关心正在使用哪个服务,Service(Module) A 或 B..
如果是这种情况,您需要另一个具有实现细节的服务来为用户做出决定,中介者.. IMediator。
消费者请求 => IMediator 确定使用哪个服务 => 在服务 A 或 B(模块 A 或 B)之间进行选择。
如果消费者需要选择哪个服务(哪个模块),那么可能你可以提供key来区分,比如输入参数arg1。
通过 IUnitOfWork => IUnitOfWork 使用键(arg1 或枚举)的消费者请求根据键(或枚举)确定选择哪个实现块(模块 A 或模块 B)来发送请求。
无论您设计哪种方式,我认为无论您如何使用 IUnitOfWork 进行抽象,都需要有中间步骤,因为在后台执行的实现方式不同。