简述在线推广网站的方法,宝安中心做网站,公司名称大全两字霸气,生产管理网站开发「 系统设计 」 为什么要做架构分层#xff1f; 参考鸣谢 3.设计模式之分层思维#xff1a;为什么要做代码分层架构#xff1f; 从零开始学架构#xff08;八#xff09;分层架构和设计模式 架构模式之分层架构总结 文章目录 「 系统设计 」 为什么要做架构分层…「 系统设计 」 为什么要做架构分层 参考鸣谢 3.设计模式之分层思维为什么要做代码分层架构 从零开始学架构八分层架构和设计模式 架构模式之分层架构总结 文章目录 「 系统设计 」 为什么要做架构分层一、什么是分层架构MVCOSITCP/IP文件系统 二、分层有什么好处模块化复用性拓展性 三、如何来做系统分层确定层次定义接口遵循设计原则 四、分层架构的不足复杂性问题性能问题灵活性问题 五、回顾小结 引言 在软件系统设计中分层架构是一种常见而强大的设计模式。通过将系统划分为不同的层次每个层次专注于特定功能分层架构有助于提高系统的可维护性、可扩展性和模块化。本文将深入探讨分层架构的底层原理阐述其优势以及一些可能的缺陷。 一、什么是分层架构
分层架构是一种将系统划分为多个层次的设计模式每个层次专注于特定的功能。这样的设计使得系统的不同部分能够更好地组织和管理从而提高了系统的可维护性、可扩展性和可理解性。
MVC
我们在刚刚成为程序员的时候会被“教育”说系统的设计要是“MVC”Model-View-Controller架构。它将整体的系统分成了 Model模型View视图和 Controller控制器三个层次也就是将用户视图和业务处理隔离开并且通过控制器连接起来很好地实现了表现和逻辑的解耦是一种标准的软件分层架构。 另外一种常见的分层方式是将整体架构分为表现层、逻辑层和数据访问层
表现层顾名思义嘛就是展示数据结果和接受用户指令的是最靠近用户的一层逻辑层里面有复杂业务的具体实现数据访问层则是主要处理和存储之间的交互。
这是在架构上最简单的一种分层方式。其实我们在不经意间已经按照三层架构来做系统分层设计了比如在构建项目的时候我们通常会建立三个目录Web、Service 和 Dao它们分别对应了表现层、逻辑层还有数据访问层。 OSI
除此之外如果我们稍加留意就可以发现很多的分层的例子。比如我们在大学中学到的 OSI 网络模型它把整个网络分了七层自下而上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
TCP/IP
工作中经常能用到 TCP/IP 协议它把网络简化成了四层即链路层、网络层、传输层和应用层。每一层各司其职又互相帮助网络层负责端到端的寻址和建立连接传输层负责端到端的数据传输等同时呢相邻两层还会有数据的交互。这样可以隔离关注点让不同的层专注做不同的事情。 文件系统
Linux 文件系统也是分层设计的从下图你可以清晰地看出文件系统的层次。在文件系统的最上层是虚拟文件系统VFS用来屏蔽不同的文件系统之间的差异提供统一的系统调用接口。虚拟文件系统的下层是 Ext3、Ext4 等各种文件系统再向下是为了屏蔽不同硬件设备的实现细节我们抽象出来的单独的一层——通用块设备层然后就是不同类型的磁盘了。
我们可以看到某些层次负责的是对下层不同实现的抽象从而对上层屏蔽实现细节。比方说 VFS 对上层系统调用层来说提供了统一的调用接口同时对下层中不同的文件系统规约了实现模型当新增一种文件系统实现的时候只需要按照这种模型来设计就可以无缝插入到 Linux 文件系统中。 那么为什么这么多系统一定要做分层的设计呢答案是分层设计存在一定的优势。 二、分层有什么好处
模块化
**分层的设计可以简化系统设计让不同的人专注做某一层次的事情。**想象一下如果你要设计一款网络程序却没有分层该是一件多么痛苦的事情。
因为你必须是一个通晓网络的全才要知道各种网络设备的接口是什么样的以便可以将数据包发送给它。你还要关注数据传输的细节并且需要处理类似网络拥塞数据超时重传这样的复杂问题。当然了你更需要关注数据如何在网络上安全传输不会被别人窥探和篡改。
而有了分层的设计你只需要专注设计应用层的程序就可以了其他的都可以交给下面几层来完成。
复用性
**再有分层之后可以做到很高的复用。**比如我们在设计系统 A 的时候发现某一层具有一定的通用性那么我们可以把它抽取独立出来在设计系统 B 的时候使用起来这样可以减少研发周期提升研发的效率。
拓展性
**最后一点分层架构可以让我们更容易做横向扩展。**如果系统没有分层当流量增加时我们需要针对整体系统来做扩展。但是如果我们按照上面提到的三层架构将系统分层后那么我们就可以针对具体的问题来做细致的扩展。
比如说业务逻辑里面包含有比较复杂的计算导致 CPU 成为性能的瓶颈那这样就可以把逻辑层单独抽取出来独立部署然后只对逻辑层来做扩展这相比于针对整体系统扩展所付出的代价就要小的多了。
横向扩展是高并发系统设计的常用方法之一既然分层的架构可以为横向扩展提供便捷 那么支撑高并发的系统一定是分层的系统。 三、如何来做系统分层
说了这么多分层的优点那么当我们要做分层设计的时候需要考虑哪些关键因素呢
确定层次
在我看来最主要的一点就是你需要理清楚每个层次的边界是什么。你也许会问“如果按照三层架构来分层的话每一层的边界不是很容易就界定吗”
没错当业务逻辑简单时层次之间的边界的确清晰开发新的功能时也知道哪些代码要往哪儿写。但是当业务逻辑变得越来越复杂时边界就会变得越来越模糊。
定义接口
任何一个系统中都有用户系统最基本的接口是返回用户信息的接口它调用逻辑层的 GetUser 方法GetUser 方法又和 User DB 交互获取数据就像下图左边展示的样子。
这时产品提出一个需求在 APP 中展示用户信息的时候如果用户不存在那么要自动给用户创建一个用户。同时要做一个 HTML5 的页面HTML5 页面要保留之前的逻辑也就是不需要创建用户。这时逻辑层的边界就变得不清晰表现层也承担了一部分的业务逻辑将获取用户和创建用户接口编排起来。 遵循设计原则
使用设计原则如单一职责原则、依赖倒置原则等确保每个层次都专注于一个特定的功能。这有助于确保系统的一致性和可维护性。
那我们要如何做呢参照阿里发布的《阿里巴巴 Java 开发手册 v1.4.0详尽版》我们可以将原先的三层架构细化成下面的样子 我来解释一下这个分层架构中的每一层的作用。
终端显示层各端模板渲染并执行显示的层。当前主要是 Velocity 渲染JS 渲染 JSP 渲染移动端展示等。开放接口层将 Service 层方法封装成开放接口同时进行网关安全控制和流量控制等。Web 层主要是对访问控制进行转发各类基本参数校验或者不复用的业务简单处理等。Service 层业务逻辑层。Manager 层通用业务处理层。这一层主要有两个作用其一你可以将原先 Service 层的一些通用能力下沉到这一层比如与缓存和存储交互策略中间件的接入其二你也可以在这一层封装对第三方接口的调用比如调用支付服务调用审核服务等。DAO 层数据访问层与底层 MySQL、Oracle、Hbase 等进行数据交互。外部接口或第三方平台包括其它部门 RPC 开放接口基础平台其它公司的 HTTP 接口。
在这个分层架构中主要增加了 Manager 层它与 Service 层的关系是Manager 层提供原子的服务接口Service 层负责依据业务逻辑来编排原子接口。
以上面的例子来说Manager 层提供创建用户和获取用户信息的接口而 Service 层负责将这两个接口组装起来。这样就把原先散布在表现层的业务逻辑都统一到了 Service 层每一层的边界就非常清晰了。
除此之外分层架构需要考虑的另一个因素是层次之间一定是相邻层互相依赖数据的流转也只能在相邻的两层之间流转。
我们还是以三层架构为例数据从表示层进入之后一定要流转到逻辑层做业务逻辑处理然后流转到数据访问层来和数据库交互。那么你可能会问“如果业务逻辑很简单的话可不可以从表示层直接到数据访问层甚至直接读数据库呢”
其实从功能上是可以的但是从长远的架构设计考虑这样会造成层级调用的混乱比方说如果表示层或者业务层可以直接操作数据库那么一旦数据库地址发生变更你就需要在多个层次做更改这样就失去了分层的意义并且对于后面的维护或者重构都会是灾难性的。 四、分层架构的不足
任何事物都不可能是尽善尽美的分层架构虽有优势也会有缺陷。
复杂性问题
它最主要的一个缺陷就是增加了代码的复杂度。这是显而易见的嘛明明可以在接收到请求后就可以直接查询数据库获得结果却偏偏要在中间插入多个层次并且有可能每个层次只是简单地做数据的传递。有时增加一个小小的需求也需要更改所有层次上的代码看起来增加了开发的成本并且从调试上来看也增加了复杂度原本如果直接访问数据库我只需要调试一个方法现在我却要调试多个层次的多个方法。
性能问题
另外一个可能的缺陷是如果我们把每个层次独立部署层次间通过网络来交互那么多层的架构在性能上会有损耗。这也是为什么服务化架构性能要比单体架构略差的原因也就是所谓的**“多一跳”**问题。
灵活性问题
过于刚性的分层结构可能使系统难以适应变化。在一些需求频繁变更的项目中可能需要更灵活的架构设计。 那我们是否要选择分层的架构呢答案当然是肯定的。
你要知道任何的方案架构都是有优势有缺陷的天地尚且不全何况我们的架构呢分层架构固然会增加系统复杂度也可能会有性能的损耗但是相比于它能带给我们的好处来说这些都是可以接受的或者可以通过其它的方案解决的。我们在做决策的时候切不可以偏概全因噎废食。 五、回顾小结
在系统设计中分层架构是一种强大而常见的设计模式。它通过将系统划分为不同的层次每个层次专注于特定功能提高了系统的可维护性、可扩展性和模块化。
分层架构有着多种形式如MVC、OSI网络模型、TCP/IP协议等适用于不同领域和问题。这种设计模式的优势包括模块化、复用性和横向扩展的便利性。
然而分层架构也存在一些缺陷包括增加代码复杂性、性能损耗以及过于刚性可能导致难以适应变化。在选择架构时需要权衡各方面的利弊根据项目需求和特点做出明智的决策。
分层架构是项目中用到的最多的架构模式之一核心思想是归类和解耦实现有多种方式不应局限于三层四层也可能是两层五层六层具体以实际的项目为准。
实际每一层还会有一些变化不同的设计模式和架构模式实现的分层和代码的组织方式也是不同的没有完全一样的架构合适的就是最好的。
总体而言分层架构为软件系统提供了一种有力的组织和设计方式为系统的健壮性和可维护性奠定了基础。