SOCKADDR本身是C的一个结构,C已经对它进行了封装,可惜使用的时候你要操作一大堆细节,这增大了出错率。
我们来看SOCKADDR为我们提供了一个什么样的功能。
1.它为其他部分提供信息。
我们把信息传递给sockaddr,以后传递sockaddr给需要地址信息的部分。
2.它提供查询功能
别人传递过来的sockaddr你可能要做检查合法性等若干需要获取信息的操作。
sockaddr说白了就是一个载体。存放了网络地址信息,再深刻一点就是一个ip地址和一个端口。
为了把直接使用sockaddr的所有细节隐藏起来,对涉及sockaddr的操作一并封装起来是必然要求。
我想ACE_INET_Addr的思想首要是为了隐藏信息。要不要考虑其他类的使用情况呢?我想这个是不必要的。如果你提供了该提供的,那使用者不会有任何无理要求。
这其实就是facade的设计要求使然。
把细节的操作格式化,譬如做成了函数,编译器可以捕获错误的使用。
我想ACE_INET_Addr给我的启示是,把容易出错且没有严格检查包含的行为、数据制定规则,由该规则保证容易出错的地方不会出错或在出错的时候提醒使用者。
在C++中,这个规则的检查者只有一个,他就是编译器。
所以制定这个规则的手段就要围绕编译器的检查来做文章,在这里,使用的是转化为函数利用编译器对函数的参数类型检查来做。
这个问题继续分析下去,我们可以得出:我们能借助编译器的,最多的也只有类型检查了。所以思考手段的方向转到什么情况下编译器要执行类型检查。
最常用的是函数调用。
9754

被折叠的 条评论
为什么被折叠?



