应用场景:view层某列,或某值有多个复杂的逻辑处理。
解决方法:
1.将所有逻辑处理抽象为一个接口。
2.将所有逻辑处理抽象为对应的业务处理。
3.将所有逻辑处理配置到XML中。
4.运行时自动调用所需要的逻辑处理。
对应代码:
1.将所有逻辑处理抽象为一个接口:
/// <summary>
/// 获取流程状态接口
/// </summary>
public interface IProjectMenu
{
string GetFlowState(string projectID, ref string[] relationIdIDs);
}
2.将所有逻辑处理抽象为对应的业务处理:
public class BoHTDC : IProjectMenu
{
public string GetFlowState(string projectID, ref string[] relationIdIDs)
{
return ""
}
}
其他业务抽象类一样处理。
3.将所有逻辑处理配置到XML中:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<components>
<!--可研提交-->
<component id="BoLXKYTJ" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXKYTJ, Sinopec.IWMS.Business"></component>
<!--可研预审流程-->
<component id="BoLXKYYS" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXKYYS, Sinopec.IWMS.Business"></component>
<!--可研正式评审流程-->
<component id="BoLXKYZSPS" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXKYZSPS, Sinopec.IWMS.Business"></component>
<!--总体设计评审流程-->
<component id="BoLXZTSJPS" service="Sinopec.IWMS.Business.IProjectMenu, Sinopec.IWMS.Business" type="Sinopec.IWMS.Business.BoLXZTSJPS, Sinopec.IWMS.Business"></component>
<!-- 其他配置-->
</components>
</configuration>
4.运行时自动调用所需要的逻辑处理:
//建立容器
IWindsorContainer container = new WindsorContainer(new XmlInterpreter(path));
//获取组件(通过装载的Key,在以后的版本中可以通过接口类型来解析)
var menuService = container.Resolve(strClassName) as IProjectMenu;
menuService.GetFlowState(projectID, ref relationIds);