现在的位置: 首页 > 综合 > 正文

制定统一业务逻辑基础规则

2012年12月31日 ⁄ 综合 ⁄ 共 3615字 ⁄ 字号 评论关闭

       在系统开发前都会制定代码编写规则,这样能够很好的规范系统代码编写,提高代码可阅读性和可维护性。同样在编写业务逻辑上自己也会定义基础处理规则,这样就能够清楚明确系统中所有业务逻辑的处理过程(主要也是方便对业务逻辑的理解和维护);在实际情况中业务逻辑的规则是比较复杂和多变的,似乎制定一个统一的规则比较难。但是事实上可以采用Command模式制定业务逻辑的基础规则,用于描述业务逻辑执行的切入点;对于一些复杂的规则(如业务流程处理等)可以通过Template Method模式对基础规则进行扩展;这种制定规则只适用于单一职责业务逻辑,对于一些多职责业务逻辑只能选择别的方式。

       在软件开发中解决问题的方法很多,虽然都是解决同一问题但不同人实现的方法却可以完全不一样;因此以下描述的内容只是本人在项目制定的业务逻辑基础规则。在系统设计时会制定以下两种业务逻辑的基础规则:

1)  多职责规则;用于业务数据的基础操作,主要是添加,修改和删除。

2)  单一职责规则;用于扩展出查询、统计和复杂处理的基础规则(实际上是规范所有单一职责的业务逻辑)

 

多职责规则

       这种规则主要用于规范基于业务基础操作操作的业务逻辑;职责包括对业务数据进行添加,修改和删除等操作。这种规则在数据库处理系统中比较常见,其行为也比较统一。在制定这种规则相对比较简单,制定相关职责方法即可:

            /// <summary>

     /// 模型操作规则

     /// </summary>

     public interface IModelLogic

     {

         /// <summary>

         /// 添加模型对象

         /// </summary>

         void Add();

         /// <summary>

         /// 删除模型对象

         /// </summary>

         void Delete();

         /// <summary>

         /// 更新模型对象

         /// </summary>

         void Edit();

     }

为了更适合应用,可以实现IModelLogic建立一个方便处理的Adapter

     public class ModelLogicAdapter:IModelLogic

     {

         private object mIndex = null;

         /// <summary>

         /// 获取模型对象相关索引

         /// </summary>

         private object mModelObj = null;

 

 

         protected object Index

         {

              get

              {

                   return mIndex;

              }

         }

    

         /// <summary>

         /// 获取当前模型对象

         /// </summary>

         protected object ModelObj

         {

              get

              {

                   return mModelObj;

              }

              set

              {

                   mModelObj = value;

              }

         }

        

 

 

         public ModelLogicAdapter()

         {

         }

         public ModelLogicAdapter(object index)

         {

              mIndex = index;

              OnLoadModel(mIndex);

         }

        

         #region IModelLogic 成员

         /// <summary>

         /// 加载模型对象

         /// 派生类重写

         /// </summary>

         /// <param name="index">模型相关索引</param>

         protected virtual void OnLoadModel(object index)

         {

             

         }

         /// <summary>

         /// 更新当前模型对象

         /// </summary>

         public void Add()

         {

              // TODO:  添加 ModelLogicAdapter.Add 实现

              CheckModule();

              OnAdd();

         }

         protected virtual void OnAdd()

         {

              DAOContext.Add(ModelObj);

         }

 

         /// <summary>

         /// 删除当前模型对象

         /// </summary>

         public void Delete()

         {

 

              // TODO:  添加 ModelLogicAdapter.Delete 实现

              CheckModule();

              OnDelete();

         }

         protected virtual void OnDelete()

         {

              DAOContext.Delete(ModelObj);

         }

 

         /// <summary>

         /// 编辑当前模型对象

         /// </summary>

         public void Edit()

         {

              // TODO:  添加 ModelLogicAdapter.Edit 实现

              CheckModule();

              OnEdit();

         }

         protected virtual void OnEdit()

         {

              DAOContext.Edit(ModelObj);

         }

 

         #endregion

         private void CheckModule()

         {

              if(ModelObj == null)

                   throw(new LogicException(TipMessage.MODELOGIC_ERROR_MODELOBJECT_ISNULL));

         }

         /// <summary>

         /// 获取相关索引方法

         /// </summary>

         /// <param name="table">实体相关表名称</param>

         /// <returns>索引值</returns>

         protected int GetRecordIndex(string table)

         {

              lock(this.GetType())

              {

                   int index=0;

                   System.Collections.IList list = (DBMapping.TablePK.TableName== table).List();

                   TablePK item;

                   if(list.Count ==0)

                   {

                       index =1;

                       item = new TablePK();

                       item.TableName = table;

                       item.RecordIndex = index;

抱歉!评论已关闭.