win2ks

山高月小 水落石出

ACE封装——尽可能多的隐藏平台间的差异

ACE是个跨平台的东西,所以着力点之一就是为不同平台提供同样一个接口,但这永远都只是一个美好的梦想,试想一下,linux下无线程这个东西,windows用户对信号量这个东西也颇为陌生。

提供统一接口最大的挑战是有些东西有些平台支持,而另外一些平台没有。为了接口的统一,最好不提供这些功能的封装,但是有时候,这些特定平台适用的东西在它们的平台上效率很高,有时候尽管一些平台没有对某种功能的支持,但是从其他平台上的经验上来说这个功能确实是非常有益的功能,有时候,一个平台缺乏功能一却富于功能二,而另一个平台则截然相反,为了解决这些问题,ace在封装的时候提出了尽可能隐藏平台间差异的思想,它有三个方面。

模拟出平台没有的功能。

这是最直接的想法,譬如linux上没有thread的支持,但是可以通过其他手段模拟出来这个东西,从统一接口的角度来说这是一种非常好的模式,如果从效率上来考虑,你可以有其他选择,但是有其他平台上经验的用户可以无缝的在新的平台上使用框架提供的、自己已经很熟悉的东西。

通过参数化类型处理变化性。

这是模板编程的思想,我们可以用一个模板做为特定功能的替代者完成我们想提供的功能,但是在不同平台上允许用户选择合适的实现(模板参数),最简单的,在linux下用户可以选择select模式,而在windows下,用户可能希望使用windows自己的异步模式。使用模板化、或者参数化给用户自由,也提高了应用的效率,从模式的角度来说,这种情况下使用bridge模式是最合适不过的了,而ace有的时候使用了bridge模式(有的时候没有是出于空间的考虑)。

允许代码支持任何有益的功能。

如果实在无法模拟又不合适通过参数化来处理,为了取得在特定平台上的效率或者多数平台上的一致性,允许编译通过是一个不错的想法,只要不是特定平台上的用户,他们可以一直使用特定接口,只有当他们一天使用的平台不支持该特性的时候,才会收到未实现的返回值,这已经足够了,用户可以选择特殊情况下的解决方式,毕竟平台自身的缺陷不能完全靠框架来弥补。

阅读更多
个人分类: ACE
上一篇ACE封装——使用继承提高设计清晰和可扩性
下一篇ACE封装——针对效率实施优化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭