漫谈软件设计与分工协作
本节导读:
阐述“分工/协作”是世界万事万物进化发展的必然选择,也是软件设计首要指导思想,也是软件分层、分模块的理论依据。
对于从事软件行业的人来说,大部分人会经历软件架构设计,想尽可能的将软件设计的灵活、简单、好用,谈到软件设计我们经常会听到一些术语,比如:面向对象设计、设计模式,设计原则、分层思想等。但这些模式、原则起什么作用,为什么需要这些模式、原则,我们可能说是为了软件可阅读性,可维护性,可扩展性,为了程序解耦,为了模块化,为了插件化。但这是理由吗,这个理由能站得住脚吗?隐藏在这些需求背后的是否有个“万有引力”在支配呢?
|
||
|
||
|
||
|
让我们的思绪回到中世纪,牛顿那个年代,那个年代的人们对于日月星辰的运转规律已经有比较准确认识,人们已经学会根据日月星辰的规律来指导生产生活实践,但是这个时代的人们仅仅是在利用规律,并不知道是什么在支配这些日月星辰的运转,直到牛顿出现,发现了万有引力,人类才利用万有引力将人造卫星送上天。
那么我们软件行业的很多规律、原则,比如上面提到的,面向对象开发、程序解耦、设计模式、设计原则、模块化,插件化,这些都是工作经验的总结,但我们为什么必须遵守这些规律和原则,这些规律和原则背后的万有引力是什么?
要解决这个问题,我们需要从计算机最初诞生说起,在第二次世界大战中,敌对双方都使用了飞机和火炮,猛烈轰炸对方军事目标。要想打得准,必须精确计算并绘制出"射击图表"。经查表确定炮口的角度,才能使射出去的炮弹正中飞行目标。但是,每一个数都要做几千次的四则运算才能得出来,十几个人用手摇机械计算机算几个月,才能完成一份"图表"。针对这种情况,人们开始研究把电子管作为"电子开关"来提高计算机的运算速度。许多科学家都参加了实验和研究,终于制成了世界上第一台电子计算机,起名为"埃尼阿克"。
第一台计算机制造出来后,没有内存,电脑只负责计算,输入输出都要靠人,第一台计算机使用相当不方便,因此冯·诺依曼博士在此基础上提出了计算机“冯·诺依曼结构结构”,见下图:
从上面看计算机出现了分工,分为输入、输出、计算、控制、存储五个部分,这五个部分承担不同的责任,并且相互协作,计算机硬件实现了“分工与协作”。
自从第一台计算机诞生后,计算机开始了飞速的发展,尤其随着存储系统的完善,计算机不仅仅应用在军事科研计算领域,开始进入通信、存储、计算机辅助设计、计算机辅助管理等经济商业领域,计算机程序也有机器码到高级语言进化。计算机领域有了“计算机硬件”、“计算机软件”,计算机软件又分为“操作系统”,“应用系统”,也出现了分层,分工思想,不同的层的程序相互协作。
上世纪90年代后,计算机全面应用于商业领域,为了适应工业化生产,计算机程序又分为开发语言和数据库,2000年后又出现了struts spring hibernate等,不同的组件解决不同层面的问题,也体现了“分工与协作”。
回想一下人类本身、人类社会、国家机构、企业组织架构,一辆汽车,我们发现“分工与协作”无处不在。
人由头、胳膊、腿、身体构成,头又由眼睛、鼻子、最、耳朵、大脑构成。
人类社会最初是原始部落,大家都从事体力劳动,后来出现了男子耕种,女子纺织,再后来部分人从事体力劳动,部分人从事脑力劳动,再后来一部分人从事农业活动,另一部分从事商业活动。
国家机构也同样,有分工有层次,省级,县级,乡级,还有直辖市,有中央委员会,国务院、军委、法院、检察院等,国务院又分好多部门。
企业组织架构也一样,有总经理、副总经理、部门经理、普通员工,部门分为财务部、经营管理部、采购部、运营部、市场部等。
一辆汽车也是由发动机、离合器、车架、轮胎等多个部件构成,每个部件又有很多小部件构成。
软件系统(包括电信、金融计费系统以及大型互联网网站)同人、同社会、同国家、同汽车一样,都是由很多层次,很多部分构成,并且不断演化和进化,分工原来越细,协作越来越多。
讲了这么多,那么软件设计中的万有引力是什么呢?
我认为“分工与协作”软件设计中的“万有引力”,也是世界上的万事万物存在的“万有引力”,世界上的万事万物包括人、人类社会、国家、企业、家庭、团体、汽车、飞机、轮船、仓库、房子等无处不存在着分工与协作,现实世界的每一个事物都是由部分构成整体,而且部分与整体存在着协作关系,部分与整体、部分与部分都是相互联系的。这也印证了java,c++高级开发语言最初宣称面向对象开发,将世界上的一切物体都抽象为对象。
下图是常见的web开发jar包
下节导读:
阐述软件分工的原则,协作原则,从现实世界分工习惯来推导软件系统应该如何分工,指导软件系统如何解耦。
相关推荐
- **团队协作**:强调团队成员之间的沟通与合作,确保项目能够顺利进行。 #### 三、软件工程的主要内容 - **软件工程基本观念**:介绍软件工程的基本概念、目标和原则,为后续的学习奠定基础。 - **程序员与程序...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。《漫谈设计模式》这本书深入浅出地介绍了多种设计模式,通过代码实例帮助读者理解和应用这些模式。在这个压缩包...
面向对象是一种编程范式,它使用“对象”来设计软件系统。这些对象包含数据(通常称为属性或字段)和行为(通常称为方法)。面向对象编程的四大基本原则是封装、抽象、继承和多态性。 封装是指将对象的实现细节隐藏...
### 客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析 #### 原生开发技术 ##### Microsoft阵营 **WinForm** - **简介**:WinForm是.NET框架的一部分,用于创建Windows图形用户界面的应用程序。它是.NET ...
漫谈设计模式 网络数据 分为模式介绍,创建模式和行为模式几个章节
总之,《漫谈设计模式》是一本对于Java开发者来说不可多得的资源,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅,提高自己的编程技巧和软件设计能力。通过学习和实践书中的知识,你将能够更好地应对各种...
《漫谈设计模式:从面向对象开始(带书签)》设计模式相关书籍。
漫谈城市设计要点.doc
### 数据库设计与元数据设计概述 #### 一、数据库设计的重要性 数据库设计是一个系统而复杂的工程,它不仅仅是创建几个数据表那么简单。优秀的数据库设计能够确保数据的有效存储、高效检索和方便维护,对于支撑...
### 数据库设计漫谈——多年的经验总结 #### 一、什么是数据库 在开始讨论数据库设计之前,首先要明确“什么是数据库”。通常来说,数据库是指一种组织化的数据集合,这些数据通过特定的方式进行存储、管理和访问...
2. **团队协作**:在大型项目中,架构师需要与开发团队紧密合作,确保每个人都理解并遵循架构设计的原则。 3. **持续改进**:随着项目的进展和技术的发展,架构也需要不断地进行调整和完善。架构师需要具备前瞻性的...
- **团队协作的重要性**:有效的团队合作对于软件项目的成功至关重要。良好的沟通机制、明确的责任分工以及团队成员间的相互支持是提高团队效能的关键因素。 #### 五、软件质量保证 - **质量管理体系**:实施全面...
Flash 设计制作技术漫谈 本文主要讲述 Flash 设计制作技术的发展和技术操作,并与现实生活结合,通过一个小故事来探讨用 Flash 制作动画全过程所遇到的问题以及如何解决的。同时,也特别针对一些容易误解的问题,...
望远镜&显微镜 ——漫谈软件通过电脑和网络可以获得太多的知识,但如何分析判断这些知识的价值和如何使用却很让人头痛……
架构漫谈(六):软件架构到底是要解决什么问题? 架构漫谈(七):不要空设架构师这个职位,给他实权 架构漫谈(八):从架构的角度看如何写好代码 架构漫谈(九):理清技术、业务和架构的关系