关闭

ACE封装——增强类型安全性

863人阅读 评论(0) 收藏 举报

从第一篇开始我就在讨论ace的封装,不同场合使用的同一物件封装成不同类型是提的比较多的一点。这集中提现在socket上,一个socket可以是监听连接的,可以是已经连接用以发送数据的,如果你还愿意划分,它还可以是连往其他位置的状态,这就会引发错误使用,譬如在接受连接的socket上发送数据或者用一个正在发送数据的socket连接远端,为了一次性的解决掉这个问题,ACE使用了增强类型安全性这个法则。

不同场合的同一东西被封装成不同的类型,这样错误的使用会被编译器直接指出,不会引发运行阶段的错误。

这个法则也适合强转指针的时候,sockaddr是一个多数时候需要强转的东西,而且有些时候这个强转总被忽略导致编译器抱怨,即使显式强转了,内部的东西也有可能是不正确的,为了解决这个问题,ace还是使用了类型安全的封装策略,保证sockaddr必须被正确使用。

高封装性带来了高安全性,但是也给某些特定的使用者带来麻烦,我就经常碰到这样一个问题,在高度封装的mfc中无从找到某个特定winapi的对应封装,如果一个开发者非常熟悉某个基本类型,而封装让他无法访问,这将给他带来很大的苦恼,如果一个函数必须接受一个底层的东西,那无法获取将使wrapper facade带来灾难,你可以把一个类型封装成高级的东西,但是你必须多考虑有些低级东西需要同一级别低级东西时你需要高级向低级转换问题,这是ace增强类型安全性的使用令一个原则,运行一定程度上破坏封装,直接获取数据。但是这就如强转一样,你直接获取了数据,再出问题就是你的事情了,白纸黑字,你获取过不容修改。当你决定这么做的时候,保证你的使用是正确的。

一个有效的经验是,虽然你可以获取,但是少使用,短时间使用会给你很多隐式的好处。 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:181624次
    • 积分:2942
    • 等级:
    • 排名:第12784名
    • 原创:113篇
    • 转载:3篇
    • 译文:0篇
    • 评论:28条
    文章分类