关于封装的思考

本文探讨了在软件开发中如何合理地进行封装,并通过具体的代码示例讨论了何时及何处进行参数验证,以确保程序的健壮性和易用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们一直都在谈“封装”,这个概念理解起来很容易,但是真正实践起来却很困难。

.......
       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就被这个函数吞掉了,然后会随着程序控制流,传到程序后面的调用中。

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


关于这个问题,我认为我没有思考清楚。还请各位多多指教。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涵树_fx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值