1

나는 루비 보석 워크 플로우를 찾고 있어요 : 웹 https://github.com/geekq/workflowMVC 모델의 작업 흐름?

의 예 및 다른 예는 모델 자체의 워크 플로우 코드가 있습니다. 나는 이것이 SOLID의 위반이라고 생각한다. 또한 비즈니스 로직은 MVC 계약을 위반하는 모델 클래스 (모델이 여러 주에서 진행됨에 따라 취해진 액션)로 인코딩됩니다.

예 :

class Message 

    workflow do 
    state :spam_check do 
     event :is_spam, transitions_to => :destroy 
     event :is_not_spam,:transitions_to => :finished 
    end 
    end 

    # business logic 
    def is_spam 
    self.user.spammer_score += 1 
    if self.user.spammer_score > 5 
     self.user.destroy 
    end 
    end 
end 

이 좋은 프로그래밍인가? 그렇지 않다면, 레일스 프로젝트에서 변경 사항을 코딩해야하는 위치는 어디입니까? state_machine 대 워크 플로우에

답변

0

...

난 상태 다이어그램 상태를 나타내는 생각 그리고 워크 플로우 엔진으로 쉽게 남용 될 수 있습니다.

0

Daniel, 당신이 공유 한 코드 목록과 Ruby Gem Workflow (https://github.com/geekq/workflow)에있는 코드 목록은 모델 객체에 상태, 이벤트, 전환 및 동작을 정의하는 것으로 보입니다. 이 코드는 워크 플로우는 모델 대신 컨트롤러에 적용하는 방식으로 수정 될 수있는 경우

코드 목록은 MVC 및 SOLID 들어 Gem Workflow link

class Article 
    include Workflow 
    workflow do 
    state :new do 
     event :submit, :transitions_to => :awaiting_review 
    end 
    state :awaiting_review do 
     event :review, :transitions_to => :being_reviewed 
    end 
    state :being_reviewed do 
     event :accept, :transitions_to => :accepted 
     event :reject, :transitions_to => :rejected 
    end 
    state :accepted 
    state :rejected 
    end 
end 

에서, 나는 생각한다.

모델은 도메인 엔터티 (메시지 또는 조항)의 인스턴스 개체입니다. 그들은 워크 플로우 자체를 정의하지 않습니다. 그들은 언제든지 어떤 상태에있을 수 있습니다. 주어진 모델 객체에 대한 상태 컨텍스트가있는 것이 시스템 요구 사항입니다. 예를 들어 메시지 자체는 스팸인지 상관하지 않습니다. 아티클 자체에는 신규, 거부, 승인, 제출 또는 검토중인 태그가 없습니다.

컨트롤러에 워크 플로 책임이 주어지면 컨트롤러는 이벤트를 처리하고 작업을 수행하며 상태 전환을 수행합니다. 이 경우 컨트롤러가 취한 조치는 모델 객체를 수정하는 데 필요한 작업을 수행 할 수 있습니다.

실제 유사 유 : 필자는 자신의 노트에 필기 쓰기를 시작합니다 (펜으로). 만족스럽지 않을 때까지 그 사람과 지키십시오. 기사 자체는 그 새로운/신선한 의미를 알고있다. 그런 다음 작성자는 검토를 위해 기사를 제출합니다. 기사가 검토 자 책상으로 이동하지만 기사 자체는 수정할 수없는 상태를 정의 할 수 없습니다. 등등.

의미가 있습니까?

+0

일종의. 한 상태에서 다른 상태로 전환하는 것이 아무것도 수행하지 않는 메서드 호출이라는 것을 의미합니다. 위의 이벤트 : submit() 메소드가 실제로 작동하면 어떻게 될까요? 작업을 완료해야하는 리뷰어에게 이메일을 보냅니 까? 또는 accept/reject()가 수락 또는 거부 된 이유에 대한 추가 매개 변수가 필요합니까? 이 메소드 호출은 이제 컨트롤러에 속한 작업을 수행합니다. 그러나 워크 플로 메서드 호출에서 매우 편리 할 것입니다 ...:) – Daniel

+0

글쎄, 나는 루비 전문가는 아니지만, 나는 당신이 워크 플로우 모델/프레임 워크의 액션에 의해 가능한 것이어야한다고 생각한다. 임의의 작업을 작성하고 요구 사항에 따라 유스 케이스를 확장 할 수 있습니다. 예를 들어 리뷰어에게 기사를 이메일로 보내거나 이벤트/전환을 수락하거나 거부하는 이유로 데이터베이스의 추가 매개 변수를 설정하는 것이 좋습니다. –