2010-11-28 2 views
2

내가하는 하나의 응용 프로그램은 외부 세계를 바라 보는 한 가지 일만합니다. 파일을 입력으로 가져오고 ~ 5 분 후에 다른 파일을 출력합니다.큰 '매크로'클래스를 분류하는 방법은 무엇입니까?

내부에서 일어나는 일은 사실 순차적 인 일련의 동작입니다. 우리의 의견으로는, 각각의 행동이 너무 많은 의존성이없는 작은 상자와 같기 때문에 응용 프로그램은 잘 구성되어 있습니다.

일반적으로 일부 동작은 이전 동작의 일부 정보를 사용하며 일부는 병렬로 실행될 수 있습니다. 단순화하기 위해 순차적 실행을 선호합니다.

이제이 모든 동작을 실행하는 함수는 배치 파일과 같습니다. 다른 인수를 사용하는 다른 함수에 대한 긴 호출 목록입니다.

main 
{ 
    try 
    { 
     result1 = Action1(inputFile); 
     result2 = Action2(inputFile); 
     result3 = Action3(result2.value); 
     result4 = Action4(result1.value, inputFile); 
     ... //You get the idea. There is no pattern passed paramteres 
     resultN = ActionN(parameters); 
     write output 
    } 
    catch 
    { 
     something went wrong, display the error 
    } 
} 

이 어떻게 그렇게 명령 단지 긴 목록이 아닌이 응용 프로그램의 주요 기능을 모델링 것 : 그래서, 코드에서 찾고 그것처럼 보인다?

답변

0

최상의 접근 방법인지는 확실하지 않지만 모든 결과를 저장할 개체가있을 수 있으며 차례대로 각 방법에 제공 할 수 있습니다. 모든 메서드는 필요한 매개 변수를 읽고 그 결과를 거기에 씁니다. 그런 다음 액션 컬렉션 (대리자 또는 인터페이스를 구현하는 객체)을 가지고 루프에서 호출 할 수 있습니다.

class Results 
{ 
    public int Result1 { get; set; } 
    public string Result2 { get; set; } 
    … 
} 


var actions = new Action<Results>[] { Action1, Action2, … }; 

Results results = new Results(); 

foreach (var action in actions) 
    action(results); 
2

모든 것이 영리한 패턴에 맞춰야하는 것은 아닙니다. 일련의 긴급 명령문을 긴 명령문으로 표현하는 것보다 긴 일련의 긴급 명령문을 표현하는 좀 더 우아한 방법이 있습니다.

현재 부족하다고 느끼는 유연성이 있다면 표현하고 해결책을 제안 할 수 있습니다.

자주 사용되는 특정 동작 및 결과 클러스터가있는 경우 새 기능으로 끌어 와서 "집계"동작을 빌드 할 수 있습니다.

데이터 흐름 언어와 라이브러리를 살펴볼 수는 있지만 게인은 작을 것으로 예상됩니다. 당신은 Windows 워크 플로 모든

0

,이 솔루션은 지금까지 나쁘지 않다. 동작이 분리되면, 다른 동작 사이 또는 동작과 환경 사이에 전역 매개 변수 나 다른 숨겨진 종속성이 없다는 것을 의미합니다. 이는 좋은 해결책입니다. 유지 보수 또는 읽기가 쉬우 며 기능을 확장해야하는 경우 새로운 동작을 추가해야합니다. 수량이 변경되면 매크로 시퀀스에서 선을 추가하거나 제거하면됩니다. 자주 변경하지 않아도되는 경우 프로세스 체인 : !

동작 구현이 자주 변경되지 않지만 순서와 매개 변수가 예인 시스템 인 경우 간단한 스크립트 언어를 디자인하고 매크로 클래스를 해당 스크립트로 변환 할 수 있습니다. 이 스크립트는 "행동"수준에서 문제 도메인에 익숙한 사람이 아닌 다른 사람이 관리해야합니다. 따라서 사용자는 도움없이 스크립트 언어를 사용하여 응용 프로그램을 어셈블리 할 수 ​​있습니다.

그런 종류의 문제를 나누는 좋은 방법 중 하나는 데이터 흐름 프로그래밍 (a.k.a. 흐름 기반 프로그래밍)입니다. 데이터 흐름 프로그래밍에는 사전에 쓰여진 구성 요소이 있습니다.구성 요소는 응용 프로그램 개발자의 관점에서 볼 때 블랙 박스이며 소비자 (입력) 포트와 생산자 (출력) 포트가 연결되어 처리 네트워크를 형성하고 응용 프로그램이됩니다. 도메인에 적합한 구성 요소 집합이있는 경우 새 구성 요소를 프로그래밍하지 않고도 많은 응용 프로그램을 만들 수 있습니다. 또한 구성 요소를 다른 구성 요소 (복합 구성 요소라고 함)로 구성 할 수 있습니다.

위키 백과 (좋은 출발점) : http://en.wikipedia.org/wiki/Flow-based_programming

JPM의 사이트 http://en.wikipedia.org/wiki/Dataflow_programming (책, 위키, 모든) : http://jpaulmorrison.com/fbp/

I 더 큰 시스템은 당신이 "매크로"라고 기술하는 분리 점을 가져야한다고 생각합니다. 게임조차도 그 점을 가지고 있습니다. FPS 게임에는 3D 엔진과 게임 논리 스크립트가 있거나 SCUMM VM이 있습니다.

0

처음부터 순차 워크 플로를 구현 생각할 수

관련 문제