我遇到的问题是,对于某些业务流程,调用业务对象和方法的顺序可能会经常更改。所以我提出了类似下面的内容:(抱歉我不能发布图像......,我试着在下面的文字中表达它们)
Business Objects: Object1,Object2
方法: M1,M2,M3,M4
处理: P1(M1> M2> M3),P2(M2> M3>如果M3返回真,则M4否则结束)
在这种情况下,我使用的是.NET 3.5。我创建了一些代表进程的类,其中包含我提到的那些序列。有用。但问题是每次进程发生变化时我都需要编译。如果我可以通过某种XML来配置它会好得多。
我听说过jBPM for Java,Workflow Foundation for .NET但不确定它们是否符合我的需求,或者它们是否有点过分。我甚至没有在谷歌搜索什么关键词。任何人都可以建议我应该用什么技术来解决这个问题?或者只是指向一些网站或书籍?提前谢谢。
答案 0 :(得分: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();
}
}