我对模块化的理解

http://blog.csdn.net/horkychen/article/details/8293178

模块化是一个"发现"

模块化(Modularity)这个概念与其说是一种创新,不如说是一个"发现"。这正是人们在解决问题时常用的行为方式和思维过程。它不是单纯的技术问题,更深深地影响着整个社会生活。可以读读<<设计原则:模块化的力量>>, 在<<Unxi编程艺术>>第4章也提到了这本书!

我们获取知识有两个重要的方式:归纳(conclude)和演绎(deduce),不用多解释。它们其实就是自下而上和自上而下的差别。人类有与生俱来的抽象思维能力,沟通问题时使用隐喻会大大提升效率。太多的琐事常常影响我们的判断力,所以我们总是在追求分理主次,简化问题。社会的发展带来了越来越多样的社会分工,在亚当.斯密的<<国富论>>讲到了社会分工的必然性。整个世界都在分分合合中保持着一种稳定,发展形势上也有自下而上和自上而下之分。

所以模块化正是我们思维习惯的体现,它的发现是一个必然的结果。它的目的可以概括为:

1.信息隐藏 (抽象,黑盒)。

2.分工 (正交性,聚合)。

分工同时可以更容易实现并行开发,带来开发效率的提升。而信息隐藏则降低了对程序员的要求,能够更好地掌握模块内的复杂度。而最终是一个经济目的:低成本。

经济上定义了公司的一个决策行为,当内部生产的成本高于在开放市场上购买的成本时,就不会自己生产,而是转向购买。 也就是分工合作。模块就像不同的公司,上下游之间有着各式各样的互动。当公司/模块独立运作(低耦合)时,只关注公司/模块间的契约或合同(信息隐藏),这就是模块化。可以宏观的看(不同的公司或国家),也可以微观的看(不同的部门或器官)。并且模块化本身是动态的过程,合合分分。 当发现两个公司产品线相互紧密依赖(内部生产的成本优于在市场上采购)或相似(整合会产生规模效应),就会出现并购。当公司内部某个产品线与其它产品线开始分化(更好或更差,或者经营目标等不一致时),就可能会分拆。

模块化的要素

模块化的第一要素是角色和责任(Role&Responsibility, HR上的一个概念,能引起一些思考.)。如果焦点只关注在模块,容易造成局部最优,但整体不佳的问题。这也正是约束理论要解决的问题。所以还要有标准。从系统的层级定义一个模块的目标功能,划分好角色,来约束模块的演进,以保证整体系统的最优。

模块化的第二个要素是接口,包括静态的接口定义(职责)和动态的交互定义(行为方式,如何协作,异常处理等),也可以概括为契约(contract),在技术上则称为接口(interface)。

所以模块化设计要从大的系统视角规划角色,又要从小的模块视角设计协作的细节,中间一定不断有冲突,要经过不断演化来达到一个相对稳定的结构,这取决于时间和成本上的考虑。

*在软件开发中,模块化和语言无关,关键是领域,也就是业务面的问题。这也和敏捷与否无关,不同的只是模块化程度的问题。

转载请注意出处:http://blog.csdn.net/horkychen

时间: 2024-10-16 03:21:07

我对模块化的理解的相关文章

谈谈我对SOFA模块化的理解

今天我们谈谈SOFA模块化,首先看一段SOFA的介绍: SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力.在增强了Spring Boot的同时,SOFABoot提供了让用户可以在Spring Boot中非常方便地使用SOFA中间件的能力. 在接触SOFA的模块化概念之前,我对服务端开发的模块化认知停留在"模块化"这个层面,我通常会按照下图所示的结构组织自己负责

到底是什么是前端工程化、模块化、组件化

引言 提到前端往往很多人的映像就是入门简单,HTML.CSS加一起一个星期基本上就能大概上手,JS难一点但也能很快写一些简单的小效果,在网上随便一搜索各种特效代码随意用,一个新手前端也能在很短的时间里写出炫酷的页面效果,然而入门简单并不意味着前端这碗饭很好吃,做惯了切图.布局.扣特效的前端新同学在向前发展的路上越来越觉得吃力,而没有任何编程思想和软件开发基础很多人对前端工程化.组件化.模块化.MVC这些"高大上"的词汇云里雾里.本文用最简单的语言介绍一下我对工程化.组件化.模块化的理解

模块化开发(一)

1.Node.js解决命名冲突和文件依赖的问题. 2.模块化开发的优点: 生产角度:一种生产方式,生产效率高,维护成本低 软件开发角度:一种开发模式,一种写代码的方式,开发效率高,方便后期维护 3.什么是模块化开发? 模块化:就是把一个非常复杂的一个系统给具体的细化:细化到各个小功能点,然后通过某种方式,或者说某种规则,把这些模块集合到一起,就构成了模块化系统 4.模块化演变: 全局函数:全局变量污染,无法保证不与其他模块发生变量命名冲突:模块成员之间看不出直接关系 对象命名空间:优点:从理论意

谈 CSS 模块化

以前看过模块化的相关资料以及解释,对模块化有了一个表皮的了解,自己也做了一些相关的实践,由于接触到的项目交小,所以也没能更好的去体现和理解模块化,但总体还是有那么一些感悟,但是如果要说怎么才能算是好的模块化,自己内心还是一个疑问. 前几天接到一个电话面试,谈到了css模块化的问题,觉得自己的回答太模棱两可,自己回答过后对自己的答案也不满意,没有一个周全的思考和考虑. 下面总结一下自己对css模块化的理解,尽可能的表达完善自己的想法以及对所查找到的资料的一个总结. ————————————————

如何构建一个微型的CMD模块化加载器

前言 前端模块化是一个老生常谈的话题,模块化的好处是不言而喻,比如易于代码复用.易于维护.易于团队开发d等云云.对于前端模块加载器,以前仅仅止步于会用的阶段,为了加深对前端模块化的理解,大概花了一周的时间来学习.调研并尝试自己实现一个简易版的符合CMD规范的加载器. 设计 加载器是按照CMD规范进行设计的,具体的CMD规范就不列出了,详情请见CMD规范. 入口函数 use(ids, callback) 模块定义函数 define(factory) 模块加载函数 require(id) 取得模块接

前端模块化小总结—commonJs,AMD,CMD, ES6 的Module

随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理复杂系统分解为更好的可管理模块的方式.简单来说就是解耦,简化开发,一个模块就是实现特定功能的文件,可以更方便地使用别人的代码,想要什么功能,就加载什么模块.模块开发需要遵循一定的规范 CommonJS规范 CommonJS就是一个JavaScript模块化的规范,是用在服务器端的node的模块规范,

前端工程化、模块化、组件化见解

前端往往很多人的映像就是入门简单,HTML.CSS加一起一个星期基本上就能大概上手,JS难一点但也能很快写一些简单的小效果,在网上随便一搜索各种特效代码随意用,一个新手前端也能在很短的时间里写出炫酷的页面效果,然而入门简单并不意味着前端这碗饭很好吃,做惯了切图.布局.扣特效的前端新同学在向前发展的路上越来越觉得吃力,而作为前端从业人员我们需要有编程思想和软件开发基础. 提到前端往往很多人的映像就是入门简单,HTML.CSS加一起一个星期基本上就能大概上手,JS难一点但也能很快写一些简单的小效果,

浅谈前端工程化、模块化、组件化

什么是前端工程化.模块化.组件化? 前端工程化 工程化是一种思想而不是某种技术(当然为了实现工程化我们会用一些技术) 再用一句通俗的话来概括前端工程化:前端工程化就是用做工程的思维看待和开发自己的项目,而不再是直接撸起袖子一个页面一个页面开写 前端模块化前端工程化是一个高层次的思想,而模块化和组件化是为工程化思想下相对较具体的开发方式,因此可以简单的认为模块化和组件化是工程化的表现形式. 模块化开发,一个模块就是一个实现特定功能的文件,有了模块我们就可以更方便的使用别人的代码,要用什么功能就加载

layUI学习第三日:layUI模块化开发

layui 定义为「经典模块化」,具备早前 AMD 的影子,又并非受限于 CommonJS 的那些条条框框, BootStrap 的不同在于:layui 糅合了自身对经典模块化的理解. 除了 layui 内置的全模块加载,layui 的扩展模块同样可以合并为一个文件来加载. 原文地址:https://www.cnblogs.com/chenting-personal/p/11952819.html