2011-08-03 4 views
0

일부 비즈니스 프로세스의 경우 비즈니스 개체 및 메서드 호출 순서가 자주 변경 될 수 있다는 문제점이 있습니다. 그래서 비슷한 내놓았다 아래 : (죄송합니다 ..., 나는 아래의 텍스트를 표현하려고 어떻게 든 이미지를 게시 할 수 없습니다)비즈니스 계층에서 프로세스 분리 방법

비즈니스 오브젝트 : 오브젝트 1, Object2

방법 : M1, M2, M3, M4

프로세스 : P1 (M1> M2> M3), P2 (M2> M3> 만약 M3 복귀 true의 M4 다른 단부)이있어서

나는 .NET 3.5를 사용하고있다. 앞서 언급 한 시퀀스가 ​​포함 된 프로세스를 나타내는 클래스를 만듭니다. 그것은 작동합니다. 그러나 문제는 프로세스가 변경 될 때마다 컴파일해야한다는 것입니다. 그것은 XML의 일종으로 그것을 구성 할 수 있다면 훨씬 더 좋을 것이다.

jBPM for Java, Workflow Foundation for .NET에 대해 들었지만 내 요구 사항에 맞는지 확실하지 않거나 지나치게 많을 수 있습니다. Google에서 검색 할 키워드가 없습니다. 누구든지이 문제를 해결하기 위해 사용해야하는 기술에 대해 조언 해 줄 수 있습니까? 아니면 웹 사이트 나 책을 가르쳐 주시겠습니까? 미리 감사드립니다.

답변

0

소프트웨어 계층을 분리하는 일반적인 방법은 Dependency Inversion Principle에 명시된 인터페이스를 사용하는 것입니다. 인터페이스를 사용하여 프로세스 개념을 추상화하고 해당 인터페이스의 구현에 논리를 구현할 수 있습니다. 프로세스의 논리를 변경해야하는 경우 해당 인터페이스의 새 구현을 만들 수 있습니다. 나는 새로운 프로세스 구현을 추가하고 때

public interface IMethod 
    { 
     void M1(); 
     string M2(); 
     void M3(); 
     void M4(); 
    } 

    public interface IProcess 
    { 
     IMethod Method { get; set; } 
     void P1(); 
     void P2(); 
    } 

    public class Process : IProcess 
    { 
     public IMethod Method 
     { 
      get { throw new NotImplementedException(); } 
      set { throw new NotImplementedException(); } 
     } 

     public void P1() 
     { 
      Method.M1(); 
      Method.M2(); 
     } 

     public void P2() 
     { 
      if(Method.M2()==string.Empty) 
      { 
       Method.M3(); 
      } 
     } 
    } 

    public class AnotherProcess : IProcess 
    { 
     public IMethod Method 
     { 
      get { throw new NotImplementedException(); } 
      set { throw new NotImplementedException(); } 
     } 

     public void P1() 
     { 
     Method.M4(); 
     } 

     public void P2() 
     { 
      Method.M2(); 
      Method.M4(); 
     } 
    } 

    public class UseProcess 
    { 
     private IProcess _process; 

     //you can inject the process dependency if you need use a different implementation 

     public UseProcess(IProcess process) 
     { 
      _process = process; 
     } 

     public void DoSomething() 
     { 
      _process.P1(); 
     } 
    } 
+0

IOC의 도움이됩니다 : 당신은 당신이

아래

가 그렇게 그냥 간단한 방법을 보여 주었다 사용하려는 것을 구현 주입하는 모든 IOC의 프레임 워크를 사용할 수 있습니다. 코드를 수정하지 않고 기존 구현을 변경하는 방법은? – Lepton

+0

구현을 변경할 때 process1이라고하면 process1의 새 구현을 만들어야하고 어떤 구현을 사용해야하는지 응용 프로그램에 알릴 수 있습니다 –

+0

일부 리팩토링을 한 후에는 내가 권고 한 컨테이너와 비슷한 것을 생각해 냈습니다. XML을 읽고 해당 XML 파일에 지정된 순서대로 리플렉션하여 메소드를 호출합니다. 고맙습니다. – Lepton

관련 문제