2011-08-03 26 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