淺談CQRS架構

   我們在對數據庫的操作時,可以進行讀寫分離,但是我們的業務層卻沒有做到讀寫分離,因爲業務的讀和寫都是公用一個

model對象,需要進行一些併發的控制。

          cqrs(Command Query responsibility segregation) Command就是包含增刪改,query就是查詢,通過這種分離的好處就是可以分別對Command操作和query操作分開進行優化或者一些處理。

          在cqrs架構中,增刪改都會相當於發送了一個command,然後通過commandBus來進行分發。示例demo如下:

          

public interface Command<T> {

    Object execute(T commandModel);
}

 

Command接口即是對增刪改操作的抽象接口

 

public class CreateOrderCommand implements Command<CreateOrderCommandModel>{
    @Override
    public Object execute(CreateOrderCommandModel commandModel) {
        return Info.container.put(commandModel.getId(),commandModel);
    }
}

 

具體的實現類(新增訂單命令)

@Component
public class CommandBus<T> {

    public Object dispatch(Command cmd,T model){
        return cmd.execute(model);
    }
}

 

commandBus負責分發command,交給具體的實現類去處理

@RestController
public class OrderController {

    @Autowired
    private CommandBus commandBus;


    @PostMapping("order")
    public ResponseEntity addOrder(@RequestBody CreateOrderCommandModel model){
        commandBus.dispatch(new CreateOrderCommand(),model);
        return ResponseEntity.ok("SUCCESS");
    }
}

 

這個是Controller類,通過commandBus來分發不同的命令

@Data
public class CreateOrderCommandModel {

    private Integer id;

    private String name;


}

 

實體類

 

通過上面的簡單demo即演示了一下cqrs的簡單流程,對於大家理解cqrs可能會有一些幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章