说说软件为什么要分层?

SegmentFault

共 1078字,需浏览 3分钟

 · 2020-09-01

来源:SegmentFault 思否社区

作者:Jason




背景分析


在大型软件系统设计时,业务一般会相对复杂,假如所有业务实现的代码都纠缠在一起,会出现逻辑不清晰、可读性差,维护困难,改动一处就牵一发而动全身等问题。为了更好解决这个问题就有了我们现在常说的分层架构设计。




软件分层设计


分层设计的本质其实就是将复杂问题简单化,首先基于单一职责原则(SRP-Single responsibility principle)让每个对象各司其职,各尽所能。然后再基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。这样可以更好提高程序的可维护性和可扩展性,例如生活中的楼宇设计,生日蛋糕设计,企业的组织架构设计等。




通讯领域的OSI参考模型


在计算机通讯领域还有典型的OSI参考模型(Open System Interconnection Reference Model),TCP/IP参考模型等,如图所示:



其中,TCP/IP参考模型是OSI参考模型的一种网络简化通讯模型,这里不对每一层进行介绍,具体有关OSI和TCP/IP的知识请自行进行查阅。




互联网领域的分层架构


基于Java的互联网架构,在进行分层设计时,首先要对整体的系统分层架构有一个基本认识,如图所示:



在上图中,很多公司会根据雇员的技能特长进行相关分工,例如有运维工程师,中间件平台开发工程师,产品开发工程师,测试工程师等。我们很多初级的java程序员主要从事的是产品开发或者是应用软件(例如客户关系管理系统,分销管理系统,配送管理系统,支付系统等)开发,而在应用软件开发时,我们一般也要进行分层设计,例如典型的MVC分层设计,我们可以参考阿里巴巴开发手册中给出分层设计模型,如图所示:



其中,在上图中的箭头表示一种直接依赖关系,开放接口层可以依赖于 Web 层,也可以直接依赖于 Service 层,其它依此类推(具体每层要实现的逻辑可自行查阅阿里巴巴开发手册)。




总结(Summary)


系统分层设计是一种设计思想,是让每层对象都有一个独立职责,再让多层对象协同(耦合)完成一个完整的功能。这样做可以更好提高系统可扩展性,但同时也会增加系统整体运维的难度。




点击左下角阅读原文,到 SegmentFault 思否社区 和文章作者展开更多互动和交流。

- END -

浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报