什么是模块化设计?
“没有统一的定义”。在20世纪50年代,欧美一些国家正式提出“模块化设计”的概念,把模块化设计提高到理论高度来研究,。目前,模块化设计的思想已经渗透到很多领域。在计算机领域,针对程序设计,常见的说法是把“模块化设计”定义为“以功能块为单位进行程序设计,实现其求解算法的方法”。从这个一般提法中,我们可以看到几层意思。
第一,“功能块”是对模块的描述,一个模块就是一个功能,应该只负责一个功能,在设计模式理论中类似于经常提到的“单一职责原则”。
第二,如果要体现模块化,就免不了将程序进行分解, 这也是模块化编程的另一个原则---自顶向下,逐步求精原则。
第三,一个程序被分解为多个模块,那么他们之间一定要存在一定的依赖关系,但是这个依赖关系不能太强,否则也就不能称之为“模块化”了,于是,有设计模块化编程的一条原则:高内聚,低耦合原则。事实上,在设计模式理论中,也有对应的一条设计原则叫“迪米特法则”。
这个提法把“模块化编程”定义为程序设计的一种方法,这种方法的结果是用一系列以功能块为单位的算法来描述和实现程序,笔者更认为“”模块化“”是一种思想,它将人们在日常生活中处理事情的习惯性思维应用到了程序设计当中,这是程序设计历史上一次里程碑式的思想飞跃。接触过面向对象理论的读者对此应该深有体会,也更能够理解模块化编程的意义所在。
模块化设计支持分布式开发。模块化的思想导致大量功能独立的模块出现,这些模块可以分布在世界的任何角落。无论是开发中小型的应用程序,还是构建大型的注入操作系统的程序,都可以采用分布式开发模型,集合任何可用模块为己所用。
模块化设计支持团队协同合作。在采用模块化思想进行程序设计时,最终的产品是由小的,分散的功能块组成,每一块都是基本独立的。这些功能块可以由不同的团队根据他们自己的时间表和生命周期进行开发,互不影响。最终的产品则由另一个独立的个体---发行者进行集成。
模块化设计支持应用扩展和升级。应用模块化思想设计出来的程序,就如同用积木搭建的房子。各个模块之间既能保持自己的独立性,也能通过接口保持联系。在对应用扩展时,只要实现规范的接口,就能不断的加入新功能;在对其中某些模块进行升级时,只要保持原有接口不变,就能够在不影响其他模块的基础上进行。
Nginx服务器的开发完全遵循模块化设计的理念。
习惯上将Nginx涉及到的模块分为核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块以及第三方模块等五大类。
核心模块指Nginx服务器运行必不可少的模块,他们提供nginx最核心最基础的服务,如进程管理、权限控制、错误日志记录等;
Nginx的每个模块都基本符合单一职责原则,在具体情况中可以根据实际情况裁剪和加入。
1.核心模块
核心模块主要包含对两类功能的支持,一类是主题功能,包括进程管理,权限控制,错误日志记录,配置解析等,另一类是响应请求时间必须的功能,包括事件驱动机制,正则表达式解析等。
2.标准HTTP模块
ngx_http_core
ngx_http_access_module
ngx_http_auth_basic_module
ngx_http_headers_filter_module
等等
3.可选http模块
ngx_http_addtion_module
ngx_http_degradation_module
ngx_http_flv_module
4.邮件服务模块