[代码重构]利用“函数重载”实现“默认参数”

引言:

在函数调用的时候,我们往往希望函数能够“聪明”一点,能够明白调用者的心思,看下面的例子。

 

示例一(默认实现)

        /// <summary>
        /// 获取日志集合
        /// </summary>
        /// <param name="where">筛选条件</param>
        /// <param name="orderBy">排序条件</param>
        /// <returns></returns>
        public DataTable GetLogs(WhereClip where, OrderByClip orderBy)
        {
            return this.GetFromSection().Where(where).OrderBy(orderBy).ToTable() as DataTable;
        }

客户端A:

获取筛选最新的对象M的日志集合(关心筛选和排序-,-)

this.GetLogs(Log._.Module == 'M', Log._.Date.Desc);

客户端B:

获取筛选最新的日志集合(只关心排序,有点郁闷--||)

this.GetLogs(WhereClip.All, Log._.Date.Desc);

客户端C:

获取日志集合(不关心筛选,也不关心排序,非常郁闷—|||)

this.GetLogs(WhereClip.All, OrderByClip.Default);

上面三种情况,我们定义的函数都能够应对,不过就是傻了一点,时间久了,调用者,开始出现不满的情绪了,是谁写的函数,害我写的这么累。这时候,时候拿出重构的利器了,用重载函数,来重构我们的代码,见下面的示例:

示例二(重构后)

        /// 获取日志集合
        /// </summary>
        /// <returns></returns>
        public DataTable GetLogs()
        {
            return this.GetLogs(WhereClip.All);
        }

        /// <summary>
        /// 获取日志集合
        /// </summary>
        /// <param name="where">筛选条件</param>
        /// <returns></returns>
        public DataTable GetLogs(WhereClip where)
        {
            return this.GetLogs(where, OrderByClip.Default);
        }

        /// <summary>
        /// 获取日志集合
        /// </summary>
        /// <param name="where">筛选条件</param>
        /// <param name="orderBy">排序条件</param>
        /// <returns></returns>
        private DataTable GetLogs(WhereClip where, OrderByClip orderBy)
        {
            return this.GetFromSection().Where(where).OrderBy(orderBy).ToTable() as DataTable;
        }

总结:

重构后的代码,利用了函数的重载,封装了函数的“默认参数”,让客户端调用的时候更加关注当前的业务点。在函数变“聪明”的同时还封装了“默认实现”,只是一举两得,何乐而不为。

转载于:https://www.cnblogs.com/JavCof/archive/2011/04/20/2022272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值