6_CSLA.Net3.6中CommandBase类实践

CommandBase用来建立一个命令对象,就是执行一个批处理的命令来完成一个业务逻辑。它可以运行在客户端和服务器端。UI可以直接调用Command对象的方法。书中给的使用例子为判定业务对象是否存在,只有单一的功能。我为了把和此业务对象有关的所有操作都放到此类中,可能的操作有,根据属性判定业务对象是否存在、删除业务对象前的数据完整性检查、成批更新业务对象集合等。为此我采用了和ReadOnlyListBase相同的方法,增加一个操作类型,在调用参数中使用ReadOnlyBase业务对象,这样可以传递尽可能多的参数,如果参数超出这个范围,你在特殊处理参数的传递和状态结果的返回。状态结果的返回采用公开多个属性的方式来实现。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Csla;

using Csla.Data;

using Csla.Security;

using Csla.Validation;

using CAC.SysPrivilege.DAL;

using CAC.SysPrivilege.DAL.DTO;

namespace CAC.SysPrivilege.BusinessLibrary

{

    [Serializable()]

    public class SHOP_INFOCmd : CommandBase

    {

        /// <summary>

        /// 操作类型枚举定义

        /// </summary>

        private enum OperationType { Exists, DeleteCheck };

        private OperationType _operationType;

        private string _message;

        private bool _exists;

        private SHOP_INFOInfo _shopInfo;

 

        /// <summary>

        /// 传入操作类型,和必要的参数,采用业务对象来做参数,根据不同的操作类型来使用业务对象的不同属性

        /// </summary>

        /// <param name="operationType"></param>

        /// <param name="shopInfo"></param>

        private SHOP_INFOCmd(OperationType operationType,SHOP_INFOInfo shopInfo)

        {

            _operationType = operationType;

            _shopInfo = shopInfo;

        }

 

        /// <summary>

        /// 对象公开的属性,只有在对应的方法调用后,访问这些属性才会有实际意义

        /// </summary>

        public bool ShopInfoExists

        {

            get { return _exists; }

        }

        public string Message

        {

            get{return _message;}

        }

 

        #region Static 对外公开的方法

        /// <summary>

        /// 指定的单位代码是否存在

        /// </summary>

        /// <param name="shopId"></param>

        /// <returns></returns>

        public static bool Exists(string shopId)

        {

            //调用 DataPortal.Execute数据访问门户,先构造一个SHOP_INFOCmd对象,SHOP_INFOCmd对象需要操作类型和SHOP_INFOInfo对象

            var shop = DataPortal.Execute<SHOP_INFOCmd>(new SHOP_INFOCmd(OperationType.Exists,new SHOP_INFOInfo() { SHOP_ID = shopId }));           

            return shop.ShopInfoExists;

        }

 

        /// <summary>

        /// 删除单位前的数据检查

        /// </summary>

        /// <param name="shopId"></param>

        /// <returns></returns>

        public static string DeleteCheck(string shopId)

        {

            var shop = DataPortal.Execute<SHOP_INFOCmd>(new SHOP_INFOCmd(OperationType.DeleteCheck,new SHOP_INFOInfo() { SHOP_ID = shopId }));           

            return shop.Message;

        }

        #endregion

 

        /// <summary>

        /// 具体实现是否存在的方法

        /// </summary>

        private void _CheckExists()

        {

            var dal = new SHOP_INFODal();

           _exists = dal.Exists(_shopInfo.SHOP_ID);

        }

 

        private void _DeleteCheck()

        {

            var dal = new SHOP_INFODal();

            _message = dal.DeleteCheck(_shopInfo.SHOP_ID);

        }

 

        #region DataPortal_Execute

        /// <summary>

        /// 数据访问门户,根据不同的操作类型_operationType和分发方法

        /// </summary>

        protected override void DataPortal_Execute()

        {

            switch (_operationType)

            {

                case OperationType.Exists:

                    _CheckExists();

                    break;

                case OperationType.DeleteCheck:

                    _DeleteCheck();

                    break;              

                default:

                    break;

            }

        }

        #endregion

 

 

    }

}

 

 

测试代码:

if (SHOP_INFOCmd.Exists(collection["SHOP_ID"]))

                {

                    ViewData.ModelState.AddModelError("SHOP_ID1", "单位代码:" + collection["SHOP_ID"] + "已经存在,不能增加");

                    return ShopInfoCreate();

                }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值