Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

保持正交性 #2

Open
coneo opened this issue May 26, 2014 · 0 comments
Open

保持正交性 #2

coneo opened this issue May 26, 2014 · 0 comments
Labels

Comments

@coneo
Copy link
Owner

coneo commented May 26, 2014

什么是正交性?

《程序员修炼之道》:

"正交性"来源于几何学,如果两条直线相交成直角,他们就是正交的。在计算技术中,该术语用于表示某种不相依赖或是解偶性。如果两个或更多事物中的一个发生变化,不会影响其它事物,这些事物就是正交的。在设计良好的系统中,数据库代码于用户界面是正交的:你可以改动界面,而不影响数据库;更换数据库,而不用改动界面。

《Unix编程艺术》:

正交性是有助于设计也能紧凑的最重要特性之一。在纯粹的正交设计中,任何操作均无副作用;每个动作(无论是API调用、宏调用还是语言运算)只改变一件事,不会影响其它。无论你控制什么系统,改变每个属性的方法有且只有一个。

正交有何益处?

  1. 设计的灵活性。软件设计有一个原则是:可变性。没有哪个软件是能够保证设计一次,得永生。因此软件会面临很多的修改,一个正交性强的软件能够有效应对各种突如其来的需求修改。因为模块之间保持了独立性,相互之间没有影响,因此我们只需修改特定的模块即可,而不用牵一发而动全身。
  2. 促进可复用性。每个模块可以是具有独立功能的,有良好接口的单一模块,这样以来,我们可以使用组合的方式来集合小模块而生成大建筑。这点想法跟Unix的单一模块原则差不多。
    Unix中,存在大量的小程序,这些小程序都是独立的小程序,有标准的输入和输出。我们可以通过管道等方式发挥小程序的力量,完成复杂的功能。这些小程序间就是有良好的正交性的,他们独立的存在,形成了良好的复用效果。

正交性的例子

软件设计中,采用MVC模式开发的软件一般会保持良好的正交性。
生活中,我们的台灯,螺丝等有良好的正交性。

启示

实际编码中,我们需要让代码保持解藕,尽量减少依赖。
更多的去思考代码批判代码,是否需求改变时,可能会牵一发而动全身。

@coneo coneo added the design label Jun 22, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant