CQRS(Command Query Responsibility Segregation)命令查詢職責分離 命令:對系統產生【影響】,但無結果 查詢:對系統【不】產生【影響】,但有結果
查詢
boolean isExist= File.exist(File);
命令
File.write("寫檔案");
classDiagram
學生 o-- 課程 : 包含
學生 : 姓名
學生 : 學號
課程 : 課程編號
課程 : 分數
//命令
interface ICommand{
}
//命令處理
public interface ICommandHandler<T extends ICommand, Result> {
Result handler(T cmd);
}
//學生電話變更命令
public class StudentChangeTelCommand implements ICommand {
private String studentId;// 學號
private String tel;// 電話
public StudentChangeTelCommand(String studentId, String tel) {
super();
this.studentId = studentId;
this.tel = tel;
}
//變更學生電話命令執行
public class StudentChangeTelHandler implements ICommandHandler<StudentChangeTelCommand, Integer> {
StudentRepository repository;
public StudentChangeTelHandler(StudentRepository repository) {
super();
this.repository = repository;
}
@Override
public Integer handler(StudentChangeTelCommand cmd) {
return repository.changeTel(cmd.getStudentId(), cmd.getTel());
}
}
public class ChangeTelUseCaseTest {
StudentRepository studentRepository = new StudentRepository();
StudentChangeTelHandler StudentChangeTelHandler = new StudentChangeTelHandler(studentRepository);
@Test
public void update_tel_withExistStudent_return_1() {
ChangeTelUseCaseDTO dto = new ChangeTelUseCaseDTO();
dto.setStudentId("S00001");
dto.setTel("0911111111");
ChangeTelUseCase changeTelUseCase = new ChangeTelUseCase(StudentChangeTelHandler);
ChangeTelUseCaseOutput output = changeTelUseCase.command(dto);
assertTrue(output.getUpdateSize() > 0);
}
}