2016-10-25 2 views
1

Это был второй проект, над которым я работал, я столкнулся с одной и той же проблемой. Как правильно обрабатывать продвижение состояния бизнес-объекта? До сих пор мы используем базовый переключатель/случай:Операция Workflow Engine Java API

public void pushTransferToStatus(Long id, Status status) { 
    // SOME PRECONDITIONS 

    switch (currentStatus) { 
      case OPEN: 
       // DO SOMETHING 
       break; 
      case SAVED: 
       // DO SOMETHING ASYNC 
       break; 
      case VALIDATED: 
       // DO SOMETHING 
       break; 
      case AWAITING_SHIPPING: 
       // DO SOMETHING 
       break; 
      case VERIFIED: 
       // DO SOMETHING 
       break; 
      case CLOSED: 
       // Exit case. 
       break; 
      default: 
       throw new UnsupportedOperationException(); 
     } 
     pushTransferToStatus(id, newStatus); 
} 

Это приводит к запутанному коду, и как вы можете видеть, у меня есть операция aync для выполнения. Мне было интересно, есть ли какой-то API высокого уровня, который поможет мне справиться с развитием этого простого рабочего процесса?

Я много читал о jBPM, но я не уверен, если это соответствует моим потребностям ... Спасибо за вашу помощь

До сих пор я нашел эти, довольно просто, но было бы здорово иметь что-то интегрированы в Eclipse,

Чтобы закрыть этот вопрос, похоже, https://github.com/spring-projects/spring-statemachine это решение

ответ

0

Один из вариантов рефакторинга это было бы перенести операции по каждому делу, а также pushTransferToStatus в подклассе статуса. Вам потребуется один подкласс для каждого случая:

abstract class Status { 
    abstract void apply(Long id); 
} 

class StatusOpen extends Status { 
    void apply(Long id) { 
    // DO SOMETHING 
    } 
} 

... 

public void pushTransferToStatus(Long id, Status status) { 
    // SOME PRECONDITIONS 
    status.apply(id); 
} 

В зависимости от характера pushTransferToStatus вы могли бы, вероятно, реализовать часть этого в абстрактном классе Status, который можно было бы назвать каждым Status -внедрение

Смежные вопросы