架构风格之系统结构风格

软件开发都会经历从混沌到结构的过程。一方面,人、业务、复杂度与时间演进一般成正比,随着系统存在时间的推移,各个因素相互作用会导致系统复杂度呈指数化上升,理解、维护和改进系统比开发系统需要花费更大的代价,以至推倒重来、重复造轮子的事情在软件行业并不少见,出现这种现象的很大一个原因就在于对系统结构把握的不合理。可以认为粗粒度抽象和分离是设计过程中提供系统较高层次结构化的基本思路。

1. 系统结构划分的切入点

任何软件系统的设计都需要考虑系统结构,针对如何划分系统结构这个问题,有以下几点思路:

  • 系统如何与环境交互?
  • 系统处理流程如何组织?
  • 系统需要支持什么样的变化?
  • 系统的生命周期?

围绕这些问题,我们可以抽象出一系列系统结构相关的架构风格。

2. 分层结构

分层结构是最基本最常见的系统结构风格,下图就是一种通用的分层结构图,每一层次之间通过接口与实现的契约方式进行交互,可以严格限制跨层调用,也可以支持部分功能的跨层交互以提供分层的灵活性。典型的三层结构以及各种在三层结构上衍生出来的多层结构就是这种风格的具体体现。

2. 交互型结构

交互型结构风格应用同样广泛,其目的在于抽象组件之间的交互关系,常见的有MVC(Model View Controller)、MVP(Model View Presenter)、MVVM(Model View ViewModel)等表现形式。MVC风格是目前Web开发领域的主流分层风格,下图即为MVC模式的基本结构,我们可以看到该图中View和Model之间存在直接交互,通过Controller我们也可以把这层直接交互关系转变成间接交互关系。

MVP模式则更加明确的规定Model和View之间不应该存在直接交互,Presenter中作为一种协调器同时保存着View和Model的引用,确保Model和View之间的数据传递通过Presenter集中进行。下图是登录场景下MVP模式的结构示例,Presenter中包含主要的业务实现,由于Model、View和Presenter通过接口进行抽象且Model和View之间不存在直接交互,我们可以通过模拟(Mock)Model和View的操作结果确保Presenter能够独立进行业务逻辑的实现和验证。

4. 系统结构风格应用

系统结构风格应用广泛,以目前最流行的Spring框架而言就包含Spring MVC Web组件,该组件即是MVC风格的典型应用。Spring MVC的整体架构如下图所示。

在Spring MVC中,首先用户发送请求到前端控制器(Controller),前端控制器根据请求信息(如URL)来决定选择哪一个处理器(Handler)进行处理并把请求委托给它;处理器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理器处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;前端控制器再次收回控制权,将响应返回给用户,完成整个流程。

如果对文章感兴趣,可以关注我的微信公众号:程序员向架构师转型,或扫描下面的二维码。

我出版了《系统架构设计:程序员向架构师转型之路》、《向技术管理者转型:软件开发人员跨越行业、技术、管理的转型思维与实践》、《微服务设计原理与架构》、《微服务架构实战》等书籍,并翻译有《深入RabbitMQ》和《Spring5响应式编程实战》,欢迎交流。

发布了92 篇原创文章 · 获赞 9 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/lantian08251/article/details/99001244