NET 应用架构指导 V2 学习笔记(四) 软件架构的模式和风格
2010-05-23 08:08 Virus-BeautyCode 阅读(2115) 评论(2) 编辑 收藏 举报Layered Architecture Style分层架构风格
分层的架构模式集中在将应用的不同功能分组,进而成为不同的层,就好像栈一样,竖方向一层在一层上面。每一层的功能和一个常用的角色或者职责相关。层之间暴露通信接口,松散耦合。将你的应用分层可以很好的分离关注点,换句话说,支持灵活性和易维护性。
分层的架构风格被描述为倒金字塔行的复用,每一层都集中了一些职责,对它的直接下一层都是抽象的。在严格的分层中,每一层的组件只能和同层的组件进行通信,或者是和直接下一层进行通信。松散一点的分层中,不仅运行同层之间的通信,还允许任何层之间的通信。
应用的层次可能会部署在同一个物理机器上,也可以分布在不同的物理机器上。每一层的组件和另外一层的组件使用定义好的接口进行通信。例如:一个典型的web应用设计由表现层、业务层、数据访问层。
设计分层架构的常用原则:
- 抽象性,分层的架构将系统抽象为角色和职责在不同的层次,以及他们之间的关系。
- 封装性,
- 清晰的定义层之间的功能,分离在每一层的功能定义是清晰的,处于上层的表现层向下一层发出命令,例如业务层或者是数据访问层,需要对这些事件作出响应,允许数据在上下层之间流动。
- 高内聚,为每一层定义良好的职责边界,确保每一层的功能直接和本层的主要职责相关,将会最大化内聚性。
- 可复用,底层对于高层没有依赖,要允许底层可以在各种方案中使用。
- 松散耦合,层之间的通信建立在抽象和事件的基础上,在层之间提供松散的耦合。
分层的例子包括Line-of-Business(LOB),例如帐户和客户关系管理;企业级的web应用;企业级的桌面应用;智能客户端应用,集中处理业务逻辑。
很多设计模式都支持分层架构,例如:将表现层分离的模式,包含了很多处理用户的UI请求的方法。具有下面的好处:
- 分离关注点,例如:MVC有三个角色,Model、View、Controller。Model代表数据(可能是领域对象,也可能是业务对象);View代表UI;Controller处理请求,操作数据model,实现其他功能。
- 事件为基础通知机制,观察者模式经常被用来在数据Model发生改变的情况下,通知View。
- 委托事件处理,controller处理来自UI的view触发的事件。
分层架构的主要好处:
抽象性。允许层在抽象级别上进行改变,可以减少或者增加抽象的级别。
分离。允许在每一层升级技术,减少风险,最小化对系统的影响。
可以控制。分离关注点帮助识别依赖,将代码组织到更加可以管理部分。
性能。分布在不同的物理层,可以提高可伸缩性、容错性和性能。
重用性。分离职责提升了可重用性。例如,在MVC中,controller可以在其他兼容的view中复用。
可测试性。在层之间具有良好定义,增加了可测试性。分层之后,你可以为不同的层建立Mock对象,进行单元测试。
Message Bus Architecture Style消息总线架构风格
消息总线架构描述了一种软件系统可以从一个或者多个通信通道获取数据和发送数据的原则,因此应用可以在不需要知道细节的情况下进行交互。这个风格设计的应用之间的交互是通过在总线上传递消息(通常是异步)。消息总线提供了下面的处理能力:
- 以消息为中心的通信。
- 复杂的逻辑处理。
- 对处理逻辑的修改。
- 与不同的环境进行整合。因为使用以消息为基础的通信,如果大家使用一样的通信标准,应用可以在和不同的平台进行通信,例如:.NET和java。
消息总线的好处:
可扩展性。
减少复杂性,因为每个应用只需要知道如何和总线进行通信就可以了。
灵活性。
松散耦合。
伸缩性。同一个应用的多个实例都可以附加到总线上,可以在同时处理多个请求。
简化应用。尽管消息总线实现了添加复杂的基础架构,但是每个应用只需要支持和总线的连接就可以了,而不用支持应用之间的连接。
未完待续。。。。。。。。。。。。。。。。。。。。。。。
P30
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构