过多的解析和反解析会导致性能损失,也会增加编写过滤器本身的复杂性 。
用途
管道 - 过滤器架构用于各种应用程序,特别是简化单项处理的任务,例如 EDI、ETL 工具 。
编译器:连续的过滤器执行词法分析、语法分析、语义分析和代码生成 。
客户端 - 服务器架构

文章插图
【程序员必知的几种软件架构模式】上下文
有许多共享资源和服务是大量分布式的客户端希望访问的,我们希望控制访问或服务质量 。
问题
通过管理一组共享资源和服务,我们可以通过分解公共服务并在单个位置或少数位置进行修改来提高可修改性和复用性 。我们想要通过在将资源本身分布在多个物理服务器上的同时集中控制这些资源和服务,来提高可伸缩性和可用性 。
方案
在客户端 - 服务器模式中,组件和连接器具有特定的行为 。
- 称为“客户端”的组件将请求发送到称为“服务器”的组件,然后等待回复 。
- 服务器组件接收到客户端的请求并向其发送回复 。
服务器会成为性能瓶颈和单点故障位置 。
在系统建成后,关于功能位置(在客户端还是在服务器)的决策通常是复杂的而且变动成本很大 。
用途
对于有许多组件(客户端)发送请求到另外一些提供服务的组件(服务器)的系统,我们可以使用客户端 - 服务器模式来建模这个系统的一部分:在线应用程序,例如电子邮件、共享文档或银行服务 。
模型 - 视图 - 控制器架构(MVC)

文章插图
上下文
用户界面通常是一个交互性应用程序的最频繁被修改的部分 。用户通常希望从不同的视角查看数据,例如柱状图或者饼图 。这些表示形式都应该反映数据当前的状态 。
问题
用户界面功能如何独立于应用程序功能,同时还还对用户输入或底层应用程序数据的更改做出响应?
当底层应用程序数据更改时,如何创建、维护和协调用户界面的多个视图?
方案
模型 - 视图 - 控制器(model-view-controller,即 MVC)模式将应用程序功能分为以下三种类型的组件:
- 模型,包含应用程序的数据 。
- 视图,显示部分底层数据并与用户交互 。
- 控制器,在模型和视图之间进行中介并管理状态更改的通知 。
对于简单的用户界面,其复杂性并不值得这么做 。
模型、视图和控制器抽象可能不适用于某些用户界面工具包 。
用途
MVC 是网站或移动应用程序开发用户界面常用的一种架构模式 。
事件驱动架构上下文
需要提供计算和信息资源来处理传入的应用程序生成的独立异步事件,这种方式可以随着需求的增加而扩展 。
问题
构建分布式系统,这个系统可以服务异步到达的事件相关信息,并且能从简单小型扩展到复杂大型 。
方案

文章插图
为事件处理部署独立的事件进程或处理器 。到达的事件进入队列 。调度程序根据调度策略从队列中拉取事件并将它们分配到合适的事件处理器 。
弱点
性能和错误恢复可能是问题 。
用途
使用这个方案的电商应用程序将工作如下:
Order Service 创建一个 Order,这个订单处于待定状态,然后发布一个OrderCreated事件 。
- Customer Service 接收到这个事件并尝试为这个 Order 扣除信用 。然后发布一个 Credit Reserved 事件或者CreditLimitExceeded(超出信用限额)事件 。
- Order Service 接收到 Customer Service 发送的事件并将订单状态更改为已核准或已取消 。
部署基于服务器的企业应用程序,支持各种浏览器和原生移动客户端 。应用程序通过执行业务逻辑、访问数据库、与其它系统交换信息并返回响应来处理客户端请求 。这个应用程序可能会暴露一个第三方 API 。
问题
一体化应用程序会变得过于庞大和复杂,无法得到有效支持和部署来实现最优的分布式资源利用,例如在云环境中 。
方案

文章插图
将应用程序构建成服务套件 。每个服务都是独立部署和可扩展的,拥有自己的 API 边界 。不同的服务可以用不同的编程语言编写,管理它们自己的数据库,由不同的团队开发 。
推荐阅读
- 下一代视频编码技术的云视频应用探索
- 为什么程序员如此热爱 TypeScript?
- Java 如何获得一个文件或文件夹的大小
- 蔡文姬辅助装出什么 蔡文姬的辅助装怎么出
- 罗威纳犬的性格 罗威纳犬的优缺点
- 电视剧你是我的荣耀微博超话社区 你是我的荣耀待播剧
- 2021的夏天是几月份 2021年入夏是什么时间
- IT工程师都需要掌握的容器技术之Docker存储管理
- Python爬虫遇到验证码的几种处理方式,文章末尾有源码
- 绿源茶的生长环境,北港毛尖生长环境如何
