大家好,我是IT售前工程师Bernie.
软件架构模式是软件开发的基础,决定了软件各个功能模块之间的层级关系、依赖关系、通信方式,也影响着软件的开发、调试、运维和升级方式。
本文重点讲解在软件开发中,8种常见的架构模式,欢迎阅读。
分层模式基本上是软件中最常用、最普遍的模式。顾名思义,在分层架构中,一个软件整体被分为多个层级,每一层担负着不同的职责与角色。
通常情况下,一个软件整体会分为3层:表示层、业务逻辑层和数据访问层。
表示层即用户界面层,还有一部分对外提供的api、sdk接口服务。表示层直接面向用户,跟用户打交道,接收用户的使用指令并将IO输入下发到业务逻辑层;同时,将业务逻辑层的运算结果、静态页面、动态页面显示给用户。
业务逻辑层作为表示层和数据访问层之间的连接者,对表示层提供需要的业务逻辑,同时借助于数据访问层获得数据。主要提供的功能包括验证、计算和业务规则。
数据访问层主要负责数据的增、删、改、查,它不包括数据库,只是对数据的读写。
采用分层架构,各层间充分解耦,结构和任务清晰明确。同时,提高了各层的可扩展性、可维护性。也可以并行开发,迅速响应需求的变化。
但是,分层架构一定程度上降低了系统的运行效率。比如原本简单的数据查询在表示层就可以直接做的,分层之后就必须通过业务逻辑层才可以。多了中间层,一个层级的代码调整,会影响到多个层级都要跟着调整,级联的修改导致代码修改成本增加。
一个事件可以导致一系列的步骤发生,每一个步骤执行特定的功能。管道-过滤器架构是将一个大的任务拆分成多个顺序执行的子任务,子任务串行处理。
就像是生产车间的流水线一样,原始数据在水流线上跑动,每经过一个环节就进行一次加工处理,最终变为最终的数据。
我们可以看到,每一个【管道-过滤器】就是一个功能模块,它由输入、业务逻辑、输出3个部分构成。每经过一个管道-过滤器组合,数据便被处理一次。
管道-过滤器模式核心在于任务拆解,将复杂的任务化繁为简,形成串行的多任务处理机制。只实际开发中,存在数据封装的要求,因为每个【管道-过滤器】组合的输入、输出都是有特定格式要求的。
此外,虽然对于单个任务是串行处理的,其实【管道-过滤器】组合可以并行处理多个任务,过滤器中的任务处理是独立的,并不依赖于其他的过滤器。
C/S架构中,客户端作为服务的请求者和消费者,服务器作为服务的提供者,两个部分通过网络进行连接和交互。
C/S模式的优点是比较容易对client和server进行建模,但是会出现单点故障和性能方面的瓶颈。C/S架构的安全性比B/S高一些,适合金融业务、邮件业务和共享文档等业务。
客户端的升级也是比较复杂的事情,如果软件需要升级,那么需要对所有的客户端做手动升级才可以。现在有了云服务,客户端升级可以做批量,这仍是一项耗时的工作。
模型-视图-控制器模式( Model-View-Controller)又称MVC模式。这是一种类似于分层模式的开发架构,MVC可以将用户页面和业务逻辑进行分离,在二者之间增加了一道控制器。
UI的显示和业务逻辑处理要经过控制器的转换和传送,才可以进行交互。这样做让Model和View之间充分解耦,提高了整个软件的可扩展性、复用性和灵活性。
我们知道,UI界面在开发中是改动最为频繁的部分,那么通过MVC模式,就可以将UI改动对于业务的影响降低到最小。
事件总线模式是一种基于监听机制的工作架构,由事件、监听器、通道和事件总线四部分组成。
首先,监听器订阅事件通道,与其建立绑定关系,当事件源需要触发某个任务时会告知特定的通道。然后,与通道建立了订阅关系的监听器会收到消息通知,最后执行监听器中的各项任务。
事件总线模式类似于广播机制,我们可以通过添加订阅者来增加某个事件源的响应者。这种模式在Android开发中经常会用到。比如EventBus订阅者,它可以实现Activity、Service、Fragment、等组件间的通信。
当前,在很多大的应用软件,比如企业OA系统,一体化计划建设系统等,这些系统涉及到的流程特别复杂,功能超级多。如果采用基本的浏览器或者原生开发很难有效完成部署和升级迭代。
可以采用微服务架构,我们“化繁为简”把某一类功能归类,把整个系统作为一个个独立的微服务。各个微服务之间有自己的API边界,甚至可以采用不同的编程语言。
在数据库层面可以通过API接口调用,或者用消息队列通信。
微服务的架构使得繁杂的系统具备独立开发、独立部署的良好特点,特别适合庞大的企业应用软件。
点对点模式又称p2p模式(peer to peer),每个组件被称为节点。节不同的节点既可以作为客户端,向其他节点发请求。也可以作为其他节点的服务端,响应对方的请求。这种模式具有很强的健壮性和可扩展性。
同时,系统性能往往依赖于节点的数量,且节点之间是资源合作的关系。因此,服务质量、安全性方面可能得不到很好的保障。点对点模式常用于文件共享网络类型的企业应用。
在点对点模式中,生产者(producer)发送一条消息到消息队列queue,队列中的消息只能被一个消费者接收到并处理。并且,消费者Consumer随时处于接收消息的状态。
主从模式由master、slave两大组件构成,master组件会将工作分配给slave组件,并根据slave组件返回的结果计算出最终结果。
主从模式中,服务的执行委托给具有不同实现的不同从服务器。该模式经常用于将主数据库视和从数据库,并将数据同步到从库。
以上是关于软件开发中常用的框架模式,框架模式直接决定了开发中各个功能模块之间的依赖关系,以及数据交互方式等等。
挂一漏万,还有一些其他的模式没有列举到,希望给小伙伴们带来一些帮助。