2010-12-04 4 views
1

작업 준비와 실행을 구분하는 디자인 패턴이 있습니까?작업 준비를 실행과 분리하기위한 디자인 패턴이 있습니까?

몇 가지 예 :

  • 데이터베이스 쿼리 계획을 수립하고 실행하여 쿼리를 실행합니다.
  • 내 응용 프로그램의 경우 진행률 표시 줄을 표시 할 수 있도록 파일 복사를위한 단계적 접근 방식을 구현했습니다. 먼저 파일 복사 작업 목록을 만든 다음 각 작업의 가중치 (파일 크기)에 따라 진행률 막대를 업데이트하는 목록을 반복합니다.
  • 또한 일괄 처리 목록을 준비한 다음 데이터를 가져 오는 단계적 접근 방식을 구현했습니다. 그 이유는 복잡성을 줄이기 (다른 배치가 다른 매개 변수를 가짐) 및 메모리 과부하를 방지하기 위해서였습니다 (배치로 가져 오는 최대 데이터 량이 있습니다).

기본 패턴은 개별적으로 실행할 수있는 '작업 항목'으로 작업을 분류하는 '계획자'개체가 있다는 것입니다.

저는 궁금 해서요. 이미 알려진 디자인 패턴이 다른 개발자와 의사 소통하고 설계 개선에 도움이 될 수 있기를 바랍니다.

답변

2

당신은 말했다

"기본 패턴은 개별적으로 실행할 수있는 '작업 항목'으로 작업을 나누기 '플래너'목적이 있다는 것입니다."

이것은 Command Pattern과 같은 것을 나타낼 수 있음을 나타냅니다. 간단한 구현은 단지 인터페이스 정의, 하나의 메소드로 "Command", 서브 클래스 생성과 관련이 있습니다. 구현하기 쉽고 명령을 분리하여 테스트하기가 쉽기 때문에이 패턴이 정말 마음에 듭니다.

Composite Pattern을 볼 수도 있습니다. 해당되는 경우 CompositeCommand 추상 클래스를 만들 수 있습니다. 이것은 태스크를 구성하는 모든 명령을 실행하는 깔끔한 방법을 제공합니다. 또한 구현하기가 쉽습니다.

작업을 만족하는 복합 명령 (또는 명령의 단지 목록이 복합을 사용하려는 해달라고하면)을 만들 것입니다 귀하의 "도우미"개체 ... 자주 브로커 또는 스케줄러를 참조 분산 시스템에서

+0

명령 패턴은 요청을 객체에 캡슐화하고 요청 실행 방법을 지정하지 않습니다. '작업 항목'은 일종의 실제 구현을 나타냅니다. 나는 CompositeCommand 아이디어를 좋아합니다. –

+0

@martijn, 표준 명령에는 "실행"방법이 있습니다. 나는 그들이 당신이 일을하지 않는다는 것을 암시한다고 생각합니다. 나는 그것에 전혀 동의하지 않는다. 본질적으로 명령 패턴은 작업을 캡처하여 선택한 시간에 실행하는 방법입니다. – hvgotcodes

+0

@hvgotcodes 감마의 Command의 Participants 섹션에는 ConcreteCommand가 Receiver 객체와 액션 간의 바인딩을 정의한다고 나와 있습니다. Receiver 오브젝트는 조치와 연관된 조작을 수행하는 f}을 압니다. 따라서 Command의 고전적인 구현에서 ConcreteCommand는 Receiver에서 메서드를 호출하여 Execute()를 구현합니다.이는 ConcreteCommand가 '실제'작업을 수행하지 않는다는 것을 의미합니다. 일반적으로 'Command'는 올바른 패턴으로 느껴지지 않습니다. 객체와 의사 소통하는 것과 관련이 있기 때문에 제가 찾고있는 것이 아닙니다. –

1

근로자 또는 대리인에게 작업 할당; 스케줄러는 작업 부하에 대한 어느 정도의 지식을 가지고 구현 될 수 있으며이를 분할하거나 대기열에서 작업자에게 작업 할당을 관리 할 수 ​​있습니다.

이 패턴에 대한 설명이나 이름을 아직 찾지 못했지만 시작 지점은 Master-Worker pattern in distributed computing입니다.

+0

나는 Master-Worker가 내가 찾고 있던 것을 확장 한 것이라고 생각하지만 흥미로운 패턴이다. 감사! –

+0

Np .. 흥미로운 질문입니다. 실제로 여기에 미묘한 차이가있는 전체 제품군이 있다고 생각합니다. –

관련 문제