zoukankan      html  css  js  c++  java
  • 关于引擎的设计

    看了下大家引擎的代码,总感觉比较臃肿。现在做了如下修改,希望对大家设计引擎有帮助。

    首先对BLL层进行了改动,修改为CSMS2.Mould。这里包含所有与业务相关的表。但Mould中的类是已聚合(一次增删改数据的最小单位)作为最小单位。也就是说一些主表和子表被放在了一个聚合中。另外引擎中的表的操作也放在了Mould中,并没有把这些表的操作单独放在引擎中。结构如下:

    如果这些聚合之间有相互的操作,且是在一个引擎中的。则需要调用引擎,如果涉及到多个引擎之间的调用,则需要使用引擎调度。

    也就是说引擎是一系列表的相互操作,哪些表属于某个引擎,可以由引擎开发人员做的时候确定。

    下面看个刚才写的聚合和引擎的例子

     新装业务聚合:

    //********************************************************************************//
    //创建日期:<创建日期,2013-2-19>
    //创建作者:<张易,zhangyi@shanghai3h.com>
    //功能说明:新装业务
    //********************************************************************************//
    using System;
    using CSMS2.Application.DTO.MinBanYW;
    using CSMS2.DataAccess.MinBanYW;
    using CSMS2.Entity;
    using CSMS2.Infrastructure.DataType;
    using Oracle.DataAccess.Client;
    
    namespace CSMS2.Mould.MinBanYW
    {
        /// <summary>
        /// 新装业务,包括新装业务和新装审核资料
        /// </summary>
        public class XinZhuangYW
        {
            #region 变量
            private static MB_XINZHUANGYWProcess _MB_XINZHUANGYWProcess = new MB_XINZHUANGYWProcess();
            #endregion
    
            #region 增删改操作
            /// <summary>
            /// 新装受理,如果无数据插入,有数据则更新
            /// </summary>
            /// <param name="gongChengBH">工程编号</param>
            /// <param name="minBanGCMXDTO">dto</param>
            /// <param name="logininfo">登陆信息</param>
            /// <param name="tran">事务</param>
            /// <returns>true or false</returns>
            public static bool XinZhuangSL(string gongChengBH, MinBanGCMXDTO minBanGCMXDTO, LoginInfo logininfo, OracleTransaction tran)
            {
                bool result = false;
                Entity.MB_XINZHUANGYW xinZhuang = new Entity.MB_XINZHUANGYW();
                if (minBanGCMXDTO.ID > 0) 
                { 
                    xinZhuang = _MB_XINZHUANGYWProcess.SelectMB_XINZHUANGYW(minBanGCMXDTO.ID,tran);            
                }
    
                xinZhuang.S_GONGCHENGBH = gongChengBH;
                xinZhuang.N_BIAONENGL = minBanGCMXDTO.N_BIAONENGL;
                xinZhuang.I_CHAOBIAOFS = minBanGCMXDTO.I_CHAOBIAOFS;
                xinZhuang.S_BIAOWEI = minBanGCMXDTO.S_BIAOWEI;
                xinZhuang.I_LIANJIEFS = minBanGCMXDTO.I_LIANJIEFS;
                xinZhuang.S_RANQIBTXM = minBanGCMXDTO.S_RANQIBTXM;
                xinZhuang.I_CHUSHICM = minBanGCMXDTO.I_CHUSHICM;
                xinZhuang.I_FANGWULX = minBanGCMXDTO.I_FANGWULX;
                xinZhuang.S_GONGQIHTH = minBanGCMXDTO.S_GONGQIHTH;
                xinZhuang.S_PDABH = minBanGCMXDTO.S_PDABH;
                xinZhuang.S_ANJIANBH = minBanGCMXDTO.S_ANJIANBH;
                xinZhuang.S_CAOZUOR = logininfo.Account;
                xinZhuang.D_CAOZUOSJ = DateTime.Now;
                xinZhuang.I_JLZT = 0;
                xinZhuang.S_SHIJISYR = minBanGCMXDTO.S_SHIJISYR;
                result = _MB_XINZHUANGYWProcess.InsertOrUpdate(xinZhuang, tran);
                return result;
            }
            #endregion
    
            #region 查询操作
    
            #endregion
        }
    }


    工程信息业务聚合:

    //********************************************************************************//
    //创建日期:<创建日期,2013-2-19>
    //创建作者:<王磊,wanglei@shanghai3h.com>
    //功能说明:工程信息
    //********************************************************************************//
    using System;
    using CSMS2.Application.DTO.MinBanYW;
    using CSMS2.DataAccess.MinBanYW;
    using CSMS2.Entity;
    using CSMS2.Infrastructure.DataType;
    using Oracle.DataAccess.Client;
    
    namespace CSMS2.Mould.MinBanYW
    {
        /// <summary>
        /// 工程信息
        /// </summary>
        public class GongChengXX
        {
            #region 变量
            private static MB_GONGCHENGXXProcess _MB_GONGCHENGXXProcess = new MB_GONGCHENGXXProcess();
            #endregion
    
            #region 增删改操作
            /// <summary>
            /// 受理 根据MinBanGCZBDTO插入民办工程信息表,如果无数据插入,有数据则更新
            /// </summary>
            /// <param name="minBanGCZBDTO">dto</param>
            /// <param name="logininfo">登陆信息</param>
            /// <param name="tran">事务</param>
            /// <returns>true or false</returns>
            public static bool InsertGongChengXX(MinBanGCZBDTO minBanGCZBDTO, LoginInfo logininfo, OracleTransaction tran)
            {
                bool result = false;
                MB_GONGCHENGXX gongChengXX = new MB_GONGCHENGXX();
                if (minBanGCZBDTO.ID > 0)
                {
                    gongChengXX = _MB_GONGCHENGXXProcess.SelectMB_GONGCHENGXX(minBanGCZBDTO.ID, tran);
                }
                gongChengXX.S_GONGCHENGBH = minBanGCZBDTO.S_GONGCHENGBH;// gongChengBH;
                gongChengXX.I_GONGCHENGLX = minBanGCZBDTO.I_GONGCHENGLX;
                gongChengXX.I_YEWULX = minBanGCZBDTO.I_YEWULX;
                gongChengXX.I_KID = minBanGCZBDTO.I_KID;
                gongChengXX.I_LIUCHENGID = minBanGCZBDTO.I_LIUCHENGID;//????
                gongChengXX.S_CID = minBanGCZBDTO.S_CID;
                gongChengXX.S_ST = minBanGCZBDTO.S_ST;
                gongChengXX.S_HM = minBanGCZBDTO.S_HM;
                gongChengXX.S_DZ = minBanGCZBDTO.S_DZ;
                gongChengXX.I_QUYUBH = minBanGCZBDTO.I_QUYUBH;
                gongChengXX.I_ZHENGJIANLX = minBanGCZBDTO.I_ZHENGJIANLX;
                gongChengXX.S_ZHENGJIANHM = minBanGCZBDTO.S_ZHENGJIANHM;
                gongChengXX.S_YONGHUDZ = minBanGCZBDTO.S_YONGHUDZ;
                gongChengXX.I_DAOLUBH = minBanGCZBDTO.I_DAOLUBH;
                gongChengXX.S_YONGHUYB = minBanGCZBDTO.S_YONGHUYB;
                gongChengXX.S_LIANXISJ = minBanGCZBDTO.S_LIANXISJ;
                gongChengXX.S_LIANXIDH = minBanGCZBDTO.S_LIANXIDH;
                gongChengXX.S_ZHANGDANMC = minBanGCZBDTO.S_ZHANGDANMC;
                gongChengXX.S_ZHANGDANDZ = minBanGCZBDTO.S_ZHANGDANDZ;
                gongChengXX.S_ZHANGDANYB = minBanGCZBDTO.S_ZHANGDANYB;
                gongChengXX.I_QIYUAN = minBanGCZBDTO.I_QIYUAN;
                gongChengXX.N_BIAONENGL = minBanGCZBDTO.N_BIAONENGL;
                gongChengXX.I_CHAOBIAOFS = minBanGCZBDTO.I_CHAOBIAOFS;
                gongChengXX.S_SHOULIR = minBanGCZBDTO.S_SHOULIR;
                gongChengXX.S_SHOULIZD = minBanGCZBDTO.S_SHOULIZD;
                gongChengXX.I_SHOULIFS = minBanGCZBDTO.I_SHOULIFS;
                gongChengXX.D_SHOULISJ = minBanGCZBDTO.D_SHOULISJ;
                gongChengXX.S_GONGCHENGBZ = "";
                gongChengXX.I_LIUCHENGZT = 0;
                gongChengXX.S_CAOZUOR = logininfo.Account;
                gongChengXX.D_CAOZUOSJ = DateTime.Now;
                gongChengXX.I_JLZT = 0;
                gongChengXX.I_CEGU = minBanGCZBDTO.I_CEGU;
                gongChengXX.I_YONGQIXZ = minBanGCZBDTO.I_YONGQIXZ;
                result = _MB_GONGCHENGXXProcess.InsertOrUpdate(gongChengXX, tran);
                return result;
            }
    
            /// <summary>
            /// 根据主键更新工程状态
            /// </summary>
            /// <param name="id"></param>
            /// <param name="gongChengZT"></param>
            /// <param name="tran"></param>
            /// <returns></returns>
            public static bool UpdateGongChengZT(int id, int gongChengZT,OracleTransaction tran)
            {
                bool result = false;
                MB_GONGCHENGXX gongChengXX = _MB_GONGCHENGXXProcess.SelectMB_GONGCHENGXX(id, tran);
                gongChengXX.I_GONGCHENGZT = gongChengZT;
                result = _MB_GONGCHENGXXProcess.InsertOrUpdate(gongChengXX, tran);
                return result;
            } 
            #endregion
    
            #region 查询方法
            #endregion
        }
    }

    民用业务引擎

            /// <summary>
            /// 受理
            /// </summary>
            /// <param name="errMess">错误信息</param>
            /// <param name="minBanGCZBDTO">主表</param>
            /// <param name="minBanGCMXDTO">明细表</param>
            /// <param name="logininfo">登陆信息</param>
            /// <returns>true or false</returns>
            public static bool MinBanYWSL(out string errMess, MinBanGCZBDTO minBanGCZBDTO, MinBanGCMXDTO minBanGCMXDTO, LoginInfo logininfo)
            {
                errMess = "";
                Func<OracleTransaction, bool> func = tran =>
                {
                    //流程ID
                    int liuChengID = 0;
                    //流程类别
                    string liuChengLB = GetLiuChengLB(minBanGCZBDTO.I_GONGCHENGLX.Value, out liuChengID);
    
                    minBanGCZBDTO.I_KID = WorkFlow.GetInstanceID(liuChengLB, tran);
                    minBanGCZBDTO.I_LIUCHENGID = liuChengID;
                    //插入工程信息
                    bool result = GongChengXX.InsertGongChengXX(minBanGCZBDTO, logininfo, tran);
                    if (result)
                    {
                        switch (minBanGCZBDTO.I_YEWULX)
                        {
                            case MB_YEWULX.新装:
                                result = XinZhuangYW.XinZhuangSL(minBanGCZBDTO.S_GONGCHENGBH, minBanGCMXDTO,logininfo, tran);
                                break;
                            case MB_YEWULX.拆除:
                                result = LianXiD.ChaiChuSL(minBanGCZBDTO, minBanGCMXDTO, logininfo, tran);
                                break;
                            case MB_YEWULX.过户:
                                result = GuoHuYW.GuoHuSL(minBanGCZBDTO, minBanGCMXDTO, logininfo, tran);
                                break;
                            default:
                                break;
                        }
                    }
    
                    //新增时需要启动流程
                    if (result && minBanGCZBDTO.ID <= 0) 
                    {
                        //启动流程
                        int nextStep = 0;
                        WorkFlow.Start(minBanGCZBDTO.I_KID.Value,logininfo.Account, liuChengLB, out nextStep, tran);
    
                        //需要测估
                        if (minBanGCZBDTO.I_CEGU == 1) 
                        {
                            result = WorkFlow.GoToNext(minBanGCZBDTO.I_KID.Value,2, logininfo.Account, tran);
                        }
    
                        //更改工程信息工程状态
                        if (result)
                        {
                            result = GongChengXX.UpdateGongChengZT(minBanGCZBDTO.ID, WorkFlow.GetNextStepInt(minBanGCZBDTO.I_KID.Value,tran), tran);
                        }
                    }
                    return result;
                };
                return Transaction.InvokeOracleTransaction(logininfo.Account, func, out errMess);
            }
  • 相关阅读:
    基于MATLAB静态目标分割的药板胶囊检测
    基于YCbCr色彩模型的简易肤色识别器
    思考一个问题STM32的
    压力校准仪开发日志-10-21 迪文屏通信命令记录
    迪文屏使用须知
    结构体变量字节填充
    sizeof 的妙用
    结构体内存的对齐方式
    内存对齐
    中国游戏产业走向世界
  • 原文地址:https://www.cnblogs.com/zyizyizyi/p/2917143.html
Copyright © 2011-2022 走看看