DFL分析(四)伟大的结构

阅读更多

每个程序都有很多的代码编织而成.为了获得最大的兼容性,你要从容面对每个系统.在这个问题上,DFL做的是最好的.今天,来学习下DFL的底层代码结构. 这些代码都在DFL的internal目录下.

当写了很多代码的时候,你会发现,你的类,函数该如何组织变成了一个非常重要的事情.D语言提供的模块和versin编译,很大程度上减少了你的麻烦.但太容易定义的模块,还有模块内的可见性,你可能无法更好的决定如何去分配和组织了.好的工具太容易被滥用了.这时候需要看看看代码结构的书籍了,当然,看实际应用就更容易让你了解代码如何组织了.慢慢的,经过你细心组织,大胆重构,消除过多依赖,或者环形依赖.而DFL,无疑是一个最好的代码组织例子.

 

目标:DFL可以应用在多种Windows操作系统.从Win95一直到WindowsVista.Chris还计划开发一个Linux版本.DFL也支持Phobos和Tango.DFL还可以用在D1和D2这两个版本上.兼容这么多库,要为整体提供很多好的抽象层次.否则,代码是很难组织的.也就是好的环境抽象.

 

1.Win32的导入函数:DFL的WinApi模块没有直接引用std.c.windows.windows,因为Tango没有这个模块.wincom和winapi一样,都是扩展了std.c.windows.windows,其实标准库实现的Win32导入太不完整,每个人都要自己引入很多Win32API,这种组织方法给大家提供了范本.

 

2.Tango和Phobos,将所有的基本库引用放在一起,并统一规定为一致的行为和参数和基本的类型系统:dfl.internal.clib统一了C库的引用,dfl.internal.dlib统一了D语言层次的类型,GC,字符串操作函数.这里Tango的版本众多,DFL都兼容了.仔细看看代码,实在高明:一群版本编译啊.可以看到Tango实在是不高明:每个版本的差异都存在,以至于要搞得这么复杂.这也是我目前不愿意用Tango的原因.

 

3.UTF支持.dfl.internal.utf, Win95,98是不支持宽字符的.必须要进行转换.即在调用代码前将D字符转换成ANSI的编码.这里可以选择使用静态的链接,或者动态链接到user32,kernel32,gdi32,advapi32.而在NT系列的系统上,使用宽字符的函数.以前写了写UTF的字符函数,看到这里才发现,Chris写的最好,也最全.如果你面对类似的Unicode问题,最好来这里看看.

 

结语:DFL的基础结构是我们面对多种库和系统的最好办法:将每个正交的功能组织到一个模块中.

 

当然,这里展示的仅仅是DFL的冰山一角,还有更多好的结构,期待您去发现.

 

希望与您分享!祝学习愉快!

你可能感兴趣的:(Windows,Linux,C,C++,C#)