您的位置: 飞扬精品软件园 >> 文章中心 >> 系统教程 >> Unix系统 >> Unix基本哲学

相关文章链接

本类文章排行

最新新闻资讯

    Unix基本哲学

    Unix基本哲学


    • 阅览次数: 文章来源: 原文作者: 整理日期: 2010-07-12


    定若干年后回过头来修改这些代码的人可能恰恰就是你自己。

     

        永远不要去吃力地解读一段晦涩的代码三次。第一次也许侥幸成功,但如果发现必须重新解读一遍——离第一次太久了,具体细节无从回想——那么你该注释代码了,这样第三次就相对不会那么痛苦了。

        —Henry Spencer

        1.6.3 组合原则:设计时考虑拼接组合

        如果程序彼此之间不能有效通信,那么软件就难免会陷入复杂度的泥淖。

        在输入输出方面,Unix传统极力提倡采用简单、文本化、面向流、设备无关的格式。在经典的Unix下,多数程序都尽可能采用简单过滤器的形式,即将一个输入的简单文本流处理为一个简单的文本流输出。

        抛开世俗眼光,Unix程序员偏爱这种做法并不是因为他们仇视图形用户界面,而是因为如果程序不采用简单的文本输入输出流,它们就极难衔接。

        Unix中,文本流之于工具,就如同在面向对象环境中的消息之于对象。文本流界面的简洁性加强了工具的封装性。而许多精致的进程间通讯方法,比如远程过程调用,都存在牵扯过多各程序间内部状态的倾向。

        要想让程序具有组合性,就要使程序彼此独立。在文本流这一端的程序应该尽可能不要考虑文本流另一端的程序。将一端的程序替换为另一个截然不同的程序,而完全不惊扰另一端应该很容易做到。

        GUI可以是个好东西。有时竭尽所能也不可避免复杂的二进制数据格式。但是,在做一个GUI前,最好还是应该想想可不可以把复杂的交互程序跟干粗活的算法程序分离开,每个部分单独成为一块,然后用一个简单的命令流或者是应用协议将其组合在一起。

        在构思精巧的数据传输格式前,有必要实地考察一下,是否能利用简单的文本数据格式;以一点点格式解析的代价,换得可以使用通用工具来构造或解读数据流的好处是值得的。

        当程序无法自然地使用序列化、协议形式的接口时,正确的Unix设计至少是,把尽可能多的编程元素组织为一套定义良好的API。这样,至少你可以通过链接调用应用程序,或者可以根据不同任务的需求粘合使用不同的接口。

        (我们将在第7章详细讨论这些问题。)

        1.6.4 分离原则: 策略同机制分离,接口同引擎分离

        在Unix之失的讨论中,我们谈到过X系统的设计者在设计中的基本抉择是实行“机制,而不是策略”这种做法——使X成为一个通用图形引擎,而将用户

        界面风格留给工具包或者系统的其它层次来决定。这一点得以证明是正确的,因为策略和机制是按照不同的时间尺度变化的,策略的变化要远远快于机制。GUI工

        具包的观感时尚来去匆匆,而光栅操作和组合却是永恒的。

        所以,把策略同机制揉成一团有两个负面影响:一来会使策略变得死板,难以适应用户需求的改变,二来也意味着任何策略的改变都极有可能动摇机制。

        相反,将两者剥离,就有可能在探索新策略的时候不足以打破机制。另外,我们也可以更容易为机制写出较好的测试(因为策略太短命,不值得花太多精力在这上面)。

        这条设计准则在GUI环境之外也被广泛应用。总


    [1] [2] [3] [4] [5] [6] [7] [8]


查看所有评论

网友对Unix基本哲学 的评论

网名:
主题:
内容:
验证码: