问题:在哪里指定责任以避免两件或更多件事之间的直接耦合?
解决方案:将责任分配给中间对象以在其他组件或服务之间进行调解,以使它们不直接耦合。
这是Mediator Pattern的用武之地。而不是直接耦合:
public class CustomerOrdersController : Controller { private readonly IOrdersService _ordersService;
public CustomerOrdersController(IOrdersService ordersService) { this._ordersService = ordersService; } }
|
我们可以使用mediator对象并在对象之间进行调解:public class CustomerOrdersController : Controller { private readonly IMediator _mediator;
public CustomerOrdersController(IMediator mediator) { this._mediator = mediator; }
public async Task<IActionResult> AddCustomerOrder( [FromRoute]Guid customerId, [FromBody]CustomerOrderRequest request) { await _mediator.Send(new AddCustomerOrderCommand(customerId, request.Products));
return Created(string.Empty, null); } }
|
请注意这里。间接支持低耦合但降低了整个系统的可读性和推理。您不知道哪个类处理Controller定义中的命令。这是需要考虑的权衡因素。