河北大城县网站建设公司,wordpress music,网店培训,查看网站的外链摘要#xff1a;无论是Unix设计#xff0c;还是面向对象设计#xff0c;还是别的什么如SOA#xff0c;ECB#xff0c;消息#xff0c;事件#xff0c;MVC#xff0c;网络七层模型#xff0c;数据库设计#xff0c;等等#xff0c;他们都在干三件事——解耦#xff…摘要无论是Unix设计还是面向对象设计还是别的什么如SOAECB消息事件MVC网络七层模型数据库设计等等他们都在干三件事——解耦解耦还是解耦
无论是Unix设计还是面向对象设计还是别的什么如SOAECB消息事件MVC网络七层模型数据库设计等等他们都在干三件事——解耦解耦还是解耦所谓解耦就是让软件的模块和模块间尽量少地依赖起来。 现实当中的例子
让我先举几个现实生活中的例子
1.现实社会中制造灯具的工厂完全不关心制造灯泡的工厂制造灯泡的工厂完全不关心制造灯具的工厂但是灯泡和灯饰可以很完美地组合成用记所喜欢的样子这和weidagang 在“需求变更和IoC”说到的那个PC的例子相仿。他们是怎么做到的
2.互联网上做网站的人完全不用关心用户在用什么样的操作系统什么样的客户端浏览器当然事实上浏览器的不标准让网站那边很头痛这里只是举个例反过来上网的人也不关心做网站的人在用什么的技术开发网站。但是大家在完全不关心对方的情况下可以很正常地协同工作在一起。为什么
这样的例子太多了。为什么可以做成这样呢因为大家依赖的是一个接口灯具和灯泡并不互相依赖他们依赖的是一个接口做网站的人和浏览网站的人依赖的还是接口——HTTP协议。这就是面向对象的核心思想——依赖于接口而不是实现这就是解耦。当你看过这两个例子以后我希望你以后设计的软件至少不能比我们现实社会中的这些方法要差。不然你就是在让社会倒退了呵呵。
你会说这和Unix和应对需求变化有什么关系好让我们再来看一下Unix的设计。
Unix设计的例子
下面是几个Unix下的例子
1.Unix下所有的硬件都可以通过文件的方式存取。其统统在/dev下。于是软件和硬件的耦合被解开了操作系统只需要把硬件统统变成文件而程序只需要使用三个东西一个是fd一个是read()一个是write()就可以来操作任意的硬件了这就是抽象简单到不行。
2.Unix下所有的命令都可以用管道串起来管道绝对是个伟大的发明这样所有的命令间的交互全部解耦到只依赖于STD_INSTD_OUT设备上。最酷的是用户可以使用管道任意地拼装那些命令以完成各式各样的功能。管道这个设计思想可以映射为今天的Web Service你可以任意地拼装各种Web Service。
看到这里你会发现这还是解耦本质上来说也是一种依赖倒置——OOD的精髓。但是Unix还不仅仅是这些。我们再来看几个例子
1.Unix下软件都是绿色地安装。在iOS上更明显——各个程序间基本上互不干扰这个程序产生的垃圾文件不会影响到另一个程序。你删到一个程序不会让另一个程序不举各是各的空间。你可以删除这些程序只要把内核心留着系统照样可以启动。
2.Unix下你可以通过设置一些环境变量让多种环境同时存在比如某个LAMP用的是Apache 2.0, Mysql 4.0, PHP 4.0某个LAMP用的是Apache 2.2, Mysql 5.0PHP5.3你不但可以方便地在系统中切换这两个环境你甚至还可以同时启动他们。
3.Unix下你可以随意地替换你想要的程序。比如你不喜欢bash你可以替换成ksh/csh等你不喜欢awk你可以替换成gawk所有的东西都像零件一样你不喜欢什么你就可以替换什么。
这三个例子告诉了我们——当你把你的软件设计地耦合度非常地低时你可以随意地组合随意地安排你的系统。想当的灵活灵活到Windows到今天都学不会。
应对需求变化
看到这里你可能明白我想说的是什么了你可能开始觉得怎么样的系统设计会更有效了。如果你还记得《Steve Y 对平台的长篇大论》你就会知道我想说什么了。是的我想说的就是当你真正了解了Unix的设计思想后你会觉得今天的这些东西都是对Unix设计思想的一种传承或是变种。这种东西就是
1解耦解耦解耦。尽量地让你的模块不要在实现上耦合而是耦合某个规范某个标准。
2KISSKISSKISS。要做到高度解耦你的模块就一定要很简单当然不是说简单到只有几行代码而是简单到只干一件事并把这件事干到极致。然后通过某个标准拼装起来。
3拼装拼装拼装。我想不起来是谁说的了这句话是这样的当我想用一个模块的时候我直接调用就好了没有必要像C或Java一样还要编译。是的拼装需要一个框架需要一种标准协议然后让所有的系统都耦合在这种规范上各自独立运行就像一个机器上的各个部件一样当我觉得这个部件不爽换了就是了。例如当我们在尝试不同的算法的时候
想想建材和家俱市场无论用户过来想装修什么我都可以满足用户的不同需求只要你是和家装相关我基本上都能满足你不是吗无论你怎么变只要不变态我基本上都可以满足你。这就是解耦拼装带来的好处。
你可能会说我说得太简单了另一方面你可能觉得有一些系统这样做没必要我承认不过你可以有选择的或多或少地试试。其实我相信你已经在不自觉得或多或少地使用这种方式开发软件了
文章转载自酷壳网