![7163afb7853e30c12ccbb69cda5ef04d.png](https://i-blog.csdnimg.cn/blog_migrate/3f1447661b8b40128465a8e1bfcdd7ab.jpeg)
分层架构是什么?
我们首先需要知道架构设计的目的是什么?架构设计的目的是解决软件系统复杂度带来的问题。分层架构设计只不过是架构设计中的一种设计思想和方法论。
1.分层架构将软件应用划分为若干个层,每一层只解决一部分的问题,通过各层的协作提供整体的解决方案。大的问题被分解为一系列相对独立的子问题,局部化在每一层中,这样就有效的降低了单个问题的规模和复杂度,实现了复杂系统的第一步也是最为关键的一步分解。
2.分层架构具有良好的拓展性。各层级的职责单一化,实现高内聚低耦合,各层级的功能可以最大化地复用,层与层之间可以方便的插入新的层来拓展应用。
3.分层架构利于维护。不同的功能被封装在不同的层中,层与层之间的耦合度显著降低,各层之间通过接口交互,因此改某层代码时,只要不修改接口,就不会严重影响其他层。
为什么需要分层架构设计?
1.降低系统的复杂度,通过分层将一个复杂的系统拆分成不同层次的关联个体,各个个体专注于它们特有的职责和功能,其实它也是一种拆分思想,将一个大的问题拆分成各个子问题,击破各个子问题之后,整个大问题也就得以解决了。
2.功能复用和封装。让上游更方便地获取下游的数据,通过制定适合各层的数据格式和数据交互协议,让各层的数据交互更加方便。下游只给上游提供接口,屏蔽了接口的实现复杂度,让各层的职责专一化。
3.系统分为多层,每层完成独立的功能,层内部继续细分子模块,每层能够独立演进、部署。
如何进行分层架构设计?
1.分层原则可以基于业务抽象、硬件、变化性等来划分。
2.各层的功能基于同层和底层的功能之上,不能出现下层调用上层的情况,这样设计是为了避免互相调用导致的结构复杂化。
3.各层提供相应的接口与实现分离,对该层的访问只能通过接口进行。
4.不同层的数据形态可能不一样,各个层之间的数据传输协议也可能不一样。
总结:分层架构通过对关注点的分离有利于分化系统的复杂性,提升系统的可拓展性和可维护性。但在分层架构中,一个底层功能的获取需要经过多个层次的传递,不可避免的导致性能的下降。
模块和组件的区别
其实这两个概念不太好区分,主要还是按照分析的角度来进行区分,从“逻辑”的角度来进行系统拆分,拆分后的单元就是模块。从“物理”的角度来拆分,拆分后的单元就是组件。
举个例子来说:
学生信息管理系统,从逻辑上来拆分,可以分为登录和注册模块,个人信息模块,个人考试成绩模块。
从物理角度来拆分,可以分为nginx方向代理服务器,WEB服务器,mysql数据库(各个物理服务器又可以再次细化拆分)
系统与子系统有啥区别?
维基百科对于系统的定义:系统是由一群有关联的个体组成,个体根据某些规则运作,最终能实现一些单个个体无法完成的功能和能力。
关键词是:
关联:系统由一些有关联的个体组成,无关联的个体无法组成一个系统。
规则:系统内的个体需要一定的规则运作,而不是各自为政。
能力:最终系统拥有的能力不是各个个体的能力之和,而是会产生一些新的组合能力。
我们再来看下子系统的定义:子系统也是由一群有联系的个体所组成的系统,多半会是更大系统的一部分。
其实子系统和系统的定义是一样的,只不过观察的角度不一样,一个系统可能是另一个更大系统的子系统。
我们拿微信这个例子来分析一下:
1.微信本身是一个系统,包含聊天,登录,支付,朋友圈等子系统。
2.朋友圈这个子系统包含发动态,点赞,评论等子系统。
3.评论这个子系统又包含防刷,审核,存储,发布等子系统。
4.评论审核子系统不再包含业务意义上的子系统,而是包含一些模块和组件,这些模块或者组件本身也是另外一个维度的系统。例如,Mysql,Redis是存储系统,但不是业务子系统。
框架与架构的区别
软件框架:实现某个业界标准或完成某个特定基本任务的规范,也指为了实现某个软件规范时,提供该规范的一些基础功能的软件产品。
核心特点是:
1.框架是组件规范。如行内著名的MVC开发规范。
2.框架是提供基础功能的产品。如Spring MVC框架是基于MVC规范的开发框架,提供了很多基础的功能。
框架关注的是规范,架构关注的是结构。
架构到底是什么呢?
我们可以这样理解:架构是软件系统的顶层结构。
1.软件系统是由很多关联的个体组成,这些个体可能是系统,子系统,模块,组件等;所以架构需要清楚地描述有哪些个体。
2.系统中的个体需要按照特定的规则运作,架构需要明确和规范个体运作的规则。
3.顶层结构可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一起导致架构层次混乱。
什么是高内聚,低耦合?
我们在进行架构设计时,内聚高低是指模块或者关注点内部的一系列相关功能的相关程度,同一模块内的功能相关度越高,表示内聚性越高。
举个例子来说明下:假如有订单和用户模块,高内聚的设计是:订单模块只涵盖订单高相关度的功能,例如:下单,订单信息查询。用户模块只涵盖用户高相关度的功能,例如:用户登录,注册,用户信息查询。
低内聚的设计是:订单模块涵盖下单,用户注册功能。用户模块涵盖:订单信息查询,用户登录,用户信息查询功能。
从上面例子我们可以知道,高内聚设计的优点是:1.各个模块职责划分清晰,独立性高,模块之间不会相互干扰,各个模块拥有良好的拓展性。
低内聚的表现是:模块的功能不单一,职责不明确,模块之间相关性高,容易互相影响。