c# 本人自创通用流程式工厂模式,欢迎讨论

 1 using System;
 2 
 3 namespace FactoryEntity
 4 {
 5     public class RequestBaseEntity
 6     {
 7         public virtual Type EntityType { get; set; }
 8         public virtual string Namespace { get; set; }
 9         public virtual string Services { get; set; }
10         public virtual string Url { get; set; }
11     }
12 }
请求参数
 1 using System;
 2 
 3 namespace FactoryEntity
 4 {
 5     public class HeaderBaseEntity
 6     {
 7         //     服务器机器名
 8         public string DstSystemName { get; set; }
 9 
10         //     接口处理开始时间
11         public DateTime InterfaceProcessStart { get; set; }
12 
13         //     接口处理结束时间
14         public DateTime InterfaceProcessEnd { get; set; }
15 
16         //     响应时间
17         public string RspTime { get; }
18 
19         //     请求响应唯一标示
20         public string ReqUID { get; set; }
21 
22         //     响应代码
23         public string RspCode { get; set; }
24 
25         //     响应说明
26         public string RspDesc { get; set; }
27     }
28 }
请求头部
1 namespace FactoryEntity
2 {
3     public class ResponseBseEntity
4     {
5     }
6 }
相应报文
 1 using FactoryEntity;
 2 
 3 namespace ProcessServices
 4 {
 5     #region 主线流程接口
 6     /// <summary>
 7     /// 业务验证
 8     /// </summary>
 9     public interface IBusinessVerication { bool BusinessVerication(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response); }
10     /// <summary>
11     /// 流程执行前操作
12     /// </summary>
13     public interface IActionBef { bool ActionBef(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response); }
14     /// <summary>
15     /// 流程执行后操作
16     /// </summary>
17     public interface IActionAfter { bool ActionAfter(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response); }
18     /// <summary>
19     /// 流程执行发生异常
20     /// </summary>
21     public interface IActionFail { void ActionFail(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response); }
22     /// <summary>
23     /// 流程执行成功操作
24     /// </summary>
25     public interface IActionSuccess { bool ActionSuccess(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response); }
26     /// <summary>
27     /// 流程开始执行
28     /// </summary>
29     public interface IExecution { bool Execution(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response); }
30     /// <summary>
31     /// 流程主入口
32     /// </summary>
33     public interface IAction : IBusinessVerication, IActionBef, IActionAfter, IActionFail, IActionSuccess, IExecution { ResponseBseEntity Action(RequestBaseEntity request, ref HeaderBaseEntity header); }
34     #endregion
35 
36     #region 抽象产品流程
37     public abstract class ProcessMain : IAction
38     {
39         #region 主流程
40         public virtual ResponseBseEntity Action(RequestBaseEntity request, ref HeaderBaseEntity header)
41         {
42             ResponseBseEntity res = new ResponseBseEntity();
43             if (BusinessVerication(request, ref header, ref res))//执行前验证
44             {
45                 if (ActionAfter(request, ref header, ref res))//执行前操作
46                 {
47                     if (Execution(request, ref header, ref res))//开始执行
48                     {
49                         if (ActionBef(request, ref header, ref res))//执行完成后操作
50                         {
51                             if (ActionSuccess(request, ref header, ref res))//执行完成
52                             {
53                                 return res;
54                             }
55                         }
56                     }
57                 }
58             }
59             ActionFail(request, ref header, ref res);//执行发生异常
60             return res;
61         }
62         #endregion
63 
64         #region 流程辅助方法
65 
66         public abstract bool ActionAfter(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response);
67 
68         public abstract bool ActionBef(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response);
69 
70         public abstract void ActionFail(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response);
71 
72         public abstract bool ActionSuccess(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response);
73 
74         public abstract bool BusinessVerication(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response);
75 
76         public abstract bool Execution(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response);
77         #endregion
78     }
79     #endregion
80 }
主流程代码
 1 using System.Reflection;
 2 using FactoryEntity;
 3 using ProcessServices;
 4 
 5 namespace FactoryPatterns
 6 {
 7     #region 产品定义
 8     /// <summary>
 9     /// 产品列表接口
10     /// </summary>
11     public interface IProductList { ResponseBseEntity ProductList(RequestBaseEntity requst, ref HeaderBaseEntity header); }
12     /// <summary>
13     /// 产品接口
14     /// </summary>
15     public interface IProduct { ResponseBseEntity Product(RequestBaseEntity request, ref HeaderBaseEntity header); }
16     /// <summary>
17     /// 流程下单接口
18     /// </summary>
19     public interface IOrderCreate { ResponseBseEntity OrderCreate(RequestBaseEntity request, ref HeaderBaseEntity header); }
20     #endregion
21 
22     #region 不同工厂具体实现
23     public class TaoBaoProductServices : ProcessMain, IProduct
24     {
25         public override bool ActionAfter(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response){return true;}
26         public override bool ActionBef(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
27         public override void ActionFail(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) {}
28         public override bool ActionSuccess(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
29         public override bool BusinessVerication(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
30         public override bool Execution(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
31         public ResponseBseEntity Product(RequestBaseEntity requst, ref HeaderBaseEntity header)
32         {
33             return base.Action(requst,ref header);
34         }
35     }
36     public class TaoBaoProductListServices : ProcessMain, IProductList
37     {
38         public override bool ActionAfter(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
39         public override bool ActionBef(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
40         public override void ActionFail(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { }
41         public override bool ActionSuccess(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
42         public override bool BusinessVerication(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
43         public override bool Execution(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
44         public ResponseBseEntity ProductList(RequestBaseEntity requst, ref HeaderBaseEntity header)
45         {
46             return base.Action(requst, ref header);
47         }
48     }
49     public class TaoBaoOrderCreateServices : ProcessMain, IOrderCreate
50     {
51         public override bool ActionAfter(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
52         public override bool ActionBef(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
53         public override void ActionFail(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { }
54         public override bool ActionSuccess(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
55         public override bool BusinessVerication(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
56         public override bool Execution(RequestBaseEntity request, ref HeaderBaseEntity header, ref ResponseBseEntity response) { return true; }
57         public ResponseBseEntity OrderCreate(RequestBaseEntity requst, ref HeaderBaseEntity header)
58         {
59             return base.Action(requst, ref header);
60         }
61     }
62     #endregion
63 
64     #region FactoryServices
65     public class FactoryPatterns
66     {
67         public IAction FactoryServices { get; set; }
68         public FactoryPatterns(RequestBaseEntity request)
69         {
70             FactoryServices = (IAction)Assembly.Load(request.Namespace).CreateInstance(string.Format("{0}.{1}", request.Namespace, request.Services));
71         }
72     }
73     #endregion 
74 
75     #region 框架测试
76     public class FactoryTest
77     {
78         public static void UnitTest()
79         {
80             var header = new HeaderBaseEntity();
81             var request = new RequestBaseEntity() { Namespace = "FactoryPatterns", Services = "TaoBaoProductServices" };
82             var factory = new FactoryPatterns(request).FactoryServices;
83             factory.Action(request, ref header);
84         }
85     }
86     #endregion
87 }
工厂模式

 

posted @ 2017-04-15 20:13  罗曼蒂克'  阅读(147)  评论(0)    收藏  举报