关闭

关于封装的思考

标签: liststringnull测试
635人阅读 评论(0) 收藏 举报
分类:
我们一直都在谈“封装”,这个概念理解起来很容易,但是真正实践起来却很困难。

.......
       if(mClients.ContainsKey(clientID))
             return;
       ResponseNotification(clientID);
.......

private void ResponseNotification(string clientID)
{
      .........
      ClientType = GetClient(clientID);
      .........
}

在上面这段代码中,关于clientID的检查,是应该在ResponseNotification之中还是在ResponseNotification之前?

还有下面一段代码:

        public void RefreshClientInfoByReservations(OpenActivity.Contract.Reservation.ReservationType[] reservations)

        {

            if (reservations == null || reservations.Length == 0)

                return;//这个判断应放在函数之外还是函数里面

 

            //get clientid from resevation

            List<long> newClientIDs = new List<long>(4);

            foreach (OpenActivity.Contract.Reservation.ReservationType reservation in reservations)

            {

                if (!mClientInfo.ContainsKey(reservation.ClientID)

                    && !newClientIDs.Contains(reservation.ClientID))

                {

                    newClientIDs.Add(reservation.ClientID);

                }

            }

 

            if (newClientIDs.Count == 0)

                return;

 

            //search the client with the new client

            AddClientInfoToCache(newClientIDs.ToArray(), mClientInfo);

 

        }
关于对reservations数组的检查,应该放在函数的外面还是函数的里面?
对于这个问题,我自己也很矛盾。
将reservations的检查放在函数里面的理由:
保证在函数被调用时,不会因为reservations为空而抛出异常;并且从调用者的角度来看,在客户将reservations交给这个函数处理的时候,客户也不用考虑reservations是否为空,这也符合了一个原则,让调用变得简单。

将reservations的检查放在函数的外面的理由:
或者说是不在函数里对reservations数据进行检查,函数假定交给它处理的数据都是不为空的。那么我们按照这种假设来写代码,如果在测试的过程中,这个函数抛出了reservations为空的异常,那么这时问题出在什么地方呢?难道问题处在函数在使用reservations值的时候没有对reservations数据做检查吗?如果我们这样思考的话,就有点犯头疼医头,脚疼医脚的毛病了。我们要做的是找出让reservations为空的原因。当我们找到原因后,我们要做一个判断:这个原因是合法的吗?如果是合法的,那么我们在调用这个函数的时候,就要对reservations进行判断;如果是非法的,呵呵,那我们就发现bug了,然后我们要改掉这个bug;如果将reservations的判断放在函数里面,那么这个bug就被这个函数吞掉了,然后会随着程序控制流,传到程序后面的调用中。

讨论到这里,这让我想起了另外的一个问题:什么是健壮的程序?


关于这个问题,我认为我没有思考清楚。还请各位多多指教。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:301102次
    • 积分:5467
    • 等级:
    • 排名:第4874名
    • 原创:217篇
    • 转载:2篇
    • 译文:8篇
    • 评论:138条
    最新评论