「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」
功能性需求: 一个程序能为用户做些什么,比如,文件上传、查询数据等。 非功能性需求: 指除功能性需求以外的其他必要需求,比如,性能、安全性、容错与恢复、本地化、国际化等。
软件架构就是软件的基本结构 包括三要素:代码、代码之间的关系和两者各自的属性。
最经典的软件架构是分层架构---将软件系统进行分层。
从架构角度来聊聊什么代码要做分层、主要用于解决什么问题,以及存在优势和劣势有哪些?
客户端层(Client):调用方,比如浏览器或APP
应用服务层的网页服务器(Web Server):实现程序的运行逻辑,并从下层获取数据,返回给上层的客户端层
应用服务层的缓存(Cache);加速访问存储的数据
数据层(DB): 存储数据
把变化控制在一个层里。
代码 分层架构 是将软件 元素(代码)按照层(代码关系)的方式组织起来的一种结构。
分层架构核心的原则:
当请求或数据以外部传递过来后,必须是从上一层传递给下一层。
代码分层框架解决什么问题?
如何快速拆解功能问题?
如何提升代码的可扩展性?
通过分层来拆解问题:
-
分层架构可以将复杂的逻辑分为多个层。
-
分层架构让我们更容易做服务的横向扩展。
横向扩展 ---- 用多台配置较低的服务共同提供服务也就是集群部署服务方式
只用关注整个结构中的其中某一层的具体实现。
降低层与层之间的依赖
很容易用新的实现来替换原有层次的实现。
有利于标准化的统一
各层逻辑方便复用。
代码分层结构的优势:
不使用分层架构,代码逻辑会紧紧依赖在一起,修改某一处必定影响其他很多处。
层与层之间进行划分后,也提高了组件之间的复用性。
复杂的设计概念和简单的代码之间存在一种平衡,这就是分层架构。
-
代码分层架构设计的思维模型是简化思维,本质是抽象与拆解。
-
代码分层架构设计的目的是将复杂问题拆分为更容易解决的小问题,降低实现难度。
-
代码分层架构设计的原则和方法是通用方法,可以应用到其他需要分层设计的地方。