趣分期大学生怎么贷款:松耦合—软件的终极目标

来源:百度文库 编辑:中财网 时间:2024/04/25 22:14:23


当面向对象技术正在将建模对象持久化行为绑定到Model数据自身时,业界力推的SOA则倡导将数据从行为中解耦出来。看似矛盾,实际它们有一个共同点,即追求同一个终极目标:松耦合(loose coupling)。

当我们在Java波涛汹涌的潮流中奋击时,我们常常会思考:我为什么要这样做?甚至,我们会想:“松耦合”真的那么酷?“可维护性”真的是软件惟一?

也许我们迷失了方向;也许,我们应该好好探究一下,软件的最大追求是什么?

不仅是编程

难道,我们的大学计算机教育只是教会我们如何编程?这如同技工学校中只教会学员如何使用车床一样。

当我们学会了编程,接下来该做什么呢?是不是就什么都不做了呢?是不是就如同车工使用车床那样,只需日复一日地编程呢?

其实,当程序员在一个系统中持续编程(增加新的东西),这个系统就变得复杂了,他所面临的最大挑战是如何整理自己的产物。

也就是说,大学教育只教会我们如何“增加新的东西”,但是没有教育我们如何“整理这些东西”,而后者是目前软件领域日新月异、不断发生着的革命的新动力。而“增加新的东西”和“整理这些东西”完全属于不同层次的学问。

有些人谈到软件只会想到算法和数据结构,认为这些才是科学。其实这是将软件数学化了。软件不只是科学计算的工具,它自身也是一门科学,就象管理学/经济学一样,是科学和艺术的结合。

最近Java Boutique网站上刊登过一篇题为“Measuring the Complexity of OO Systems”的文章。该文衡量了OO系统的复杂性,并对软件复杂性的几个著名公理进行了详细阐述。

根据该文的观点,软件复杂性包括如下部分: Cyclomatic Complexity(圈复杂性)、 Response for Class(类的响应)、Weighted methods per class(每个类重量方法)。对于这些公理,如果不进行学习和培训,即使使用了OO语言Java等工具,还是会显示你是“业余”的。

松耦合设计

在软件开发的概念中,我们曾提到过“重整(refactoring)”这个概念,它的意思是:我们不但会“增加新的东西”,而且还要学会“整理这些东西”。

正如儿童拿到一个新玩具,他可以无师自通地很快学会玩它。但是,当玩过很多新玩具以后,他很难学会整理到处乱丢的玩具。由此可见:会编程不值得骄傲(可能源自天生),懂得如何整理才是真正的专业程序员。

现在,让我们回到问题的本质。我们已列举了软件的复杂性,复杂会导致难于维护和难于测试,所以我们需要整理。那么整理是否可以量化为一种程度呢?

我们使用“松耦合”这个概念来表示易于维护、易于测试、易于扩展的程度。松耦合值越高,我们的系统就更易于维护。当前,随着软件世界的发展,SOA、Ioc/AOP不都是在追求松耦合的最大化吗?

松耦合的一个反义词是“紧耦合”。从我们学会玩编程这个玩具开始,我们就面临着两种选择:一种是朴素的、无需训练的、近似自然的“紧耦合”路线;一种是经过科学培训的“松耦合”道路。选择哪一条道路,取决于是否受过专业培训,比如程序开发、软件工程、自动测试等。

所以,对于编程这个玩具,不在于是否会玩,而在于怎样玩和玩的水平。。

(作者笔名:板桥里人 www.jdon.com负责人)