Как передать данные, не относящиеся к объекту домена, в обработчик событийJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как передать данные, не относящиеся к объекту домена, в обработчик событий

Сообщение Anonymous »

В последнее время я углубился в предметно-ориентированное проектирование (DDD) и пытаюсь применить его к своему рабочему проекту. Однако я столкнулся с небольшой проблемой и нуждаюсь в вашем совете;
У нас есть система одобрения. Сотрудники могут просмотреть заявку клиента и решить, одобрить ли ее. Мы проектируем ApprovalFlow как AggregateRoot для обработки всех действий по утверждению сотрудников. Его поля следующие:

Код: Выделить всё

ApprovalFlow {
private EventBus eventBus;

private Long approvalFlowId;
private Status status;
private ApprovalResult approvalResult;

public void reject() {
this.status = Status.COMPLETED;
this.approvalResult = ApprovalResult.REJECT;
eventBus.push(new RejectEvent(approvalFlowId));
}

enum Status {
APPROVING(1),
COMPLETED(2);
private Integer code;
Status(Integer code) {
this.code = code;
}
}

enum ApprovalResult {
PASS(1),
REJECT(2);
private Integer code;
Status(Integer code) {
this.code = code;
}
}
}
Теперь, когда сотрудник решает отклонить заявку, он должен указать причину отклонения. Поскольку эта причина отклонения на самом деле не влияет на бизнес-логику, мы не моделировали ее как объект домена.
Мы пытаемся сделать следующее: если сотрудник отклоняет отказ решение, мы хотим зарегистрировать это решение и включить причину отклонения в запись. Согласно нашей модели, поток вызовов выглядит следующим образом.

Код: Выделить всё

// remote api method
public void rejectApproval(Long approvalFlowId, String rejectReason) {
commandService.rejectApproval(Long approvalFlowId);
}

// command service
public void rejectApproval(Long approvalFlowId) {
ApprovalFlow approvalFlow = approvalRepository.find(approvalFlowId);
approvalFlow.reject();
approvalRepository.save(approvalFlow);
}

// AggregateRoot reject method
public void reject() {
this.status = Status.COMPLETED;
this.approvalResult = ApprovalResult.REJECT;
eventBus.push(new RejectEvent(approvalFlowId));
}

// domain event handler and write a reject approval log;
@Subscribe
public void handleEvent(RejectEvent rejectEvent) {

RejectLog rejectLog = new RejectLog();
rejectLog.setApprovalFlowId(rejectEvent.getApprovalFlowId);
//    can't transfer rejectReason through rejectEvent to event handler,
//    because the rejectReason is not a domain object
rejectLog.setRejectReason(rejectReason);

rejectLogMapper.insert(rejectLog);

}
Может ли кто-нибудь помочь мне найти решение? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... nt-handler
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»