2010-12-09 2 views
3

프로젝트 중 하나에서 요구 사항에 대한 조언이 필요합니다. 우리가 달성하고자하는 것은 텍스트 또는 XML 파일로부터 메소드 호출의 흐름을 제어하고자한다는 것입니다. 예를 들어코드 흐름을 변경하는 워크 플로우와 같은 시스템

:

string response = new Assembly1.Class1().DoStuff(); 
if (response == "OK") 
{ 
    new Assembly1.Class2().DoStuff(); 
} 
else if (response == "NOTOK") 
{ 
    new Assembly2.Class1().DoStuff(); 
} 

어떻게 함수 호출의 순서를 수정하는 기술자가 아닌 사용자에 의해 변경 될 수있는 몇 가지 형식의 코드 위에 나타낼 수 있습니다.

+0

그래서 XML로 C# 코드를 표현하고 싶습니까? 그리고 이것은 "비 기술적 인 사용자"가 어떤면에서 더 쉬울까요? –

+0

사용자 지정 가능한 워크 플로 프로세스의 일부로서 좋은 질문입니다. – acoolaum

+0

비 기술적 인 부분은 약간 잘못되었습니다. 우리가 필요로하는 것은 흐름을 변경할 수 있어야한다는 것입니다. 비 기술적 인 사람에 의해 변경되지 않습니다. – Naveed

답변

0

나는이 목적을 위해 리플렉션을 사용하거나 XML에서 온 - 플라이 (on-fly) 코드를 생성 할 수 있다고 생각한다. 여기에 많은 샘플이 있습니다.

+0

나를 위해 일할 수있는 간단한 오픈 소스 프로젝트가 있습니까? "사용자 정의 가능한 워크 플로우 프로세스"솔루션에 대한 권장 사항. – Naveed

+0

@Naveed, 아무도 모른다, 미안. Joel이 말했듯이 자신 만의 간단한 DSL을 만들 수 있습니다. – acoolaum

0

Factory design pattern 당신에게 도움이 될 수 있습니다. 팩터 리 패턴을 사용하면 런타임에 객체를 할당하고 객체가 프로세스의 흐름을 결정할 수 있습니다. ...

WorkFlow() (인터페이스에서 참조되는) 메소드를 사용하여 다른 클래스를 빌드해야합니다. 메서드는 필요에 따라 다른 메서드를 호출 할 수 있어야합니다.

프로세스 시작시 XML 파일을 읽고 적절한 클래스에 대한 개체를 만들고 해당 클래스의 워크 플로 메서드를 호출하면 미리 정의 된 시퀀스가 ​​실행됩니다.

2

근본적으로, 당신은 달성하려는 것을 결정해야합니다.

C# 코드에는 어느 정도 복잡성이 있지만 C# 코드가 매우 유연하기 때문에 모든 복잡성이 있습니다.

기술적이지 않은 사용자에게 얼마나 많은 유연성을 제공할지 결정해야합니다. C#과 동일한 유연성을주기를 원한다면, C#에서 프로그램 할 수도 있습니다.

그렇지 않으면 첫 번째 단계는 수행하려는 구성을 설명하는 도메인 관련 언어를 발명하는 것입니다. 이미 그렇게하고 있기 전에 이미 설명하고있는 기존 도메인 관련 언어가 있는지 조사하고 싶을 수도 있습니다.

도메인 특정 언어를 정의한 다음 단계는 해당 언어를 구문 분석하고 해석하는 것입니다. 이것은 비교적 복잡하며 일반적으로 대학에서 한 학기의 장기 코스의 주제이며 컴파일러라고합니다. 컴파일러 과정을 듣지 않았다면 읽을 수있는 책이 있습니다. XML과 표준 XML 구문 분석 라이브러리와 같은 마크 업 언어를 사용하여 많은 단계를 건너 뛸 수 있습니다.

+0

내가 부울에 쓰여진 DSL을 사용하는 단순한 상태 머신 프로젝트 (http://simplestatemachine.codeplex.com/)를 점검했지만 그 목적을 정확하게 수행하지는 못한다. 내 경우에는 워크 플로우가 그렇게 복잡하지 않기 때문에 DSL이 올바른 방법입니다. 간단한 함수 호출과 if 문이있을 것입니다. – Naveed

+0

입력 데이터를 기반으로 제어 흐름을 변경하려는 경우 상태 시스템이 반드시 올바른 방법입니다. 상태 머신은 구현하기가 쉽고 알아낼 수 있습니다. 하나를 사용하려고한다면, 스스로 학습 할 수있을만큼 배울 것입니다. 이것은 시작 프로그래밍 문제입니다.어떤 DSL을 사용하고 싶은지는 정말 디자인 결정입니다. 당신은 당신 자신을 발명하거나 유사한 것을 한 사람을 찾으려고 노력할 수 있습니다. –

관련 문제