2011-08-03 63 views
0

我面臨的問題是,對於某些業務流程,調用業務對象和方法的順序可能會頻繁更改。所以,我想出了類似的東西如下:(對不起不知爲什麼我不能發佈的圖片,我試圖表達他們在下面的文字)如何在業務層中分離進程

業務對象: Object1,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所述的接口。在你的情況下,你可以使用一個接口來抽象進程概念,並在接口的實現中實現邏輯。 當您需要更改過程的邏輯時,您可以創建該接口的新實現。你可以使用任何IoC框架注入要使用

下面

的表現只是一個簡單的方法來做到這一點有什麼執行:

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

國際奧委會是有幫助的,當我加入新流程實施。如何在不觸摸我的代碼的情況下即時更改現有實現? – Lepton

+0

當你改變實現,比如說process1你必須創建一個process1的新實現,那麼你可以指示你應用程序在哪個實現上使用 –

+0

經過一些重構之後,我想出了一些類似於你所建議的容器的東西,它讀取XML並通過按該XML文件指定的順序進行反射來調用方法。謝謝。 – Lepton