GRASP之控制器模式 - Kamil Grzybek
問題:UI層之外的第一個物件是否接收並協調“控制”系統操作?
解決方案:將責任分配給表示以下選項之一的物件:
- - 表示整個“系統”,“根物件”,執行軟體的裝置或主要子系統(這些都是外觀控制器的變體)
- -表示發生系統操作的用例場景(用例或會話控制器)
這個原則實現取決於我們系統的高階設計,但一般我們需要定義協調我們的業務事務處理的物件。乍一看,似乎Web應用程式/ API中的MVC控制器在這裡是一個很好的例子(即使名稱是相同的)但對我來說並非如此。當然它接收輸入但它不應該協調系統操作 - 它應該將它委託給單獨的服務或命令處理程式:
public class CustomerOrdersController : Controller { private readonly IMediator _mediator; public CustomerOrdersController(IMediator mediator) { this._mediator = mediator; } /// <summary> /// Add customer order. /// </summary> /// <param name="customerId">Customer ID.</param> /// <param name="request">Products list.</param> [Route("{customerId}/orders")] [HttpPost] [ProducesResponseType((int)HttpStatusCode.Created)] public async Task<IActionResult> AddCustomerOrder( [FromRoute]Guid customerId, [FromBody]CustomerOrderRequest request) { await _mediator.Send(new AddCustomerOrderCommand(customerId, request.Products)); return Created(string.Empty, null); } } public class AddCustomerOrderCommandHandler : IRequestHandler<AddCustomerOrderCommand> { private readonly ICustomerRepository _customerRepository; private readonly IProductRepository _productRepository; private readonly IForeignExchange _foreignExchange; public AddCustomerOrderCommandHandler( ICustomerRepository customerRepository, IProductRepository productRepository, IForeignExchange foreignExchange) { this._customerRepository = customerRepository; this._productRepository = productRepository; this._foreignExchange = foreignExchange; } public async Task<Unit> Handle(AddCustomerOrderCommand request, CancellationToken cancellationToken) { // handling... } } |
相關文章
- GRASP之間接模式 - Kamil Grzybek模式
- GRASP 之資訊專家模式 - Kamil Grzybek模式
- GRASP之多型性模式 - Kamil Grzybek多型模式
- 比SOLID更重要的與DDD設計相關的GRASP原則 - Kamil GrzybekSolid
- Clean清潔領域模型的幾個特點 -Kamil Grzybek模型
- GRASP模式模式
- 極簡架構模式-前端控制器模式架構模式前端
- SAP: SALV 利用控制器的模式模式
- 方法容器-流程控制模式 的控制器編寫模式模式
- jmeter基礎邏輯控制器之ForEach控制器JMeter
- Using Geometry to Detect Grasp Poses in 3D Point Clouds3DCloud
- Swoft 學習筆記之控制器筆記
- ARM學習之Nand FLash控制器NaN
- 設計模式之禪之代理模式設計模式
- Symfony筆記之–控制器的快捷方法筆記
- iOS開發之返回指定的控制器iOS
- 《iOS之導航控制器的使用圖解》iOS圖解
- Symfony2 學習筆記之控制器筆記
- 設計模式之Plugin模式設計模式Plugin
- 設計模式之策略模式設計模式
- 《設計模式》之代理模式設計模式
- 設計模式之【策略模式】設計模式
- 【設計模式之代理模式】設計模式
- 【設計模式之策略模式】設計模式
- 設計模式之-命令模式設計模式
- 設計模式之代理模式設計模式
- 設計模式之命令模式設計模式
- jmeter學習指南之16個邏輯控制器JMeter
- 容器編排系統之ReplicaSet和Deployment控制器
- Swift3.0-學習之路之導航控制器Swift
- Jmeter之邏輯控制器(Logic Controller)JMeterController
- 51微控制器程式框架之組合按鍵框架
- 51微控制器程式框架之矩陣按鍵框架矩陣
- PHP 設計模式之策略模式PHP設計模式
- 設計模式之☞單例模式設計模式單例
- Javascript設計模式之代理模式JavaScript設計模式
- Javascript設計模式之命令模式JavaScript設計模式
- JavaScript 設計模式之策略模式JavaScript設計模式