什么是架构模式和架构风格
Multilayered architecture
Model-View-Controller(MVC)
Domain Driven Design
Micro-Kernel
Blackboard Pattern
Sensor-Controller-Actuator
Presentation–Abstraction–Control | CQRS
Component-based
Monolithic application
Layered (or multilayered architecture)
Pipes and Filters
Database-Centric
Blackboard
Rule-based
Event-driven aka implicit invocation
Publish-subscribe
Asynchronous Messaging
Plug-Ins
Microkernel
Reflection
Domain Specific Languages(DSL)
Client-Server (2-tier, 3-tier, n-tier exhibit this style)
Shared Nothing Architecture
Space-based Architecture
Object Request Broker
Peer-to-Peer
Representational State Transfer (REST)
Service-Oriented
Cloud Computing Patterns
MicroServices | 你会发现,架构风格中有「Multilayered」这个架构风格,架构模式里也有「Multilayered」架构模式!好像分层架构既是架构风格,也是架构模式!实际上架构模式中的「分层架构」是架构风格中的「分层架构」的实际应用。 更具有说服力的是CS架构风格,可以看到此架构风格后面有个阐述「2-tier, 3-tier, n-tier exhibit this style」,意思是两层架构、三层架构、n层架构都是CS架构风格的一种表现形式。而可以看到,三层架构是一个架构模式! >你有没有一个疑问?两层架构、三层架构、N层架构为什么不是分层架构风格的表现形式?而是CS架构风格的一种表现形式? >这个问题在后面的CS架构和分层架构中会具体阐述。 再具体一点,我们看看CS架构的约束: - Server组件提供了一组服务,并监听对这些服务的请求。 - Client组件通过一个连接器将请求发送到Server,希望执行一个服务。 - Server可以拒绝这个请求,也可以执行这个请求并将响应发送回Client 可以看到,这里只是约束了系统分为Client和Server,以及Server和Client之间的行为。 再来看三层架构模式,三层架构一般分为: - Presentation tier 展现层 - Logic tier 业务逻辑层 - Data access tier 数据访问层  可以看到,三层架构模式比CS架构风格更具体,描述了每一层的作用。 当系统有如下需求时,就可以考虑三层架构: - 需要提供用户界面(不论是本地应用这样的富客户端、还是浏览器,亦或手机APP) - 需要访问持久层数据 - 解耦(视图,业务、数据可独立进化) # 总结 用Renan Johannsen de Paula Venilton FalvoJr在《Architectural Patterns and Styles》中对架构模式和架构风格的区别来总结一下: - Architecture Pattern: { problem, context } → architecture approach; - Architecture Style: architecture approach. 实际工作中,我们一般会说「架构」,而没有具体到是「架构风格」还是「架构模式」。这么做其实有几点好处: - **理解的偏差,不影响讨论和使用**:虽然可能每个人对「架构风格」和「架构模式」的理解是有偏差的,但是并不会影响系统的讨论。反而,如果具体到风格还是模式,那可能就变成对「风格」还是「模式」的讨论,而不是对业务的讨论 - **有些情况下,风格和模式的差异并不大**:「架构风格」和「架构模式」的主要区别就是是否是针对某个「问题域」和「上下文」的!当一个「架构风格」应用到了某个「问题域」和「上下文」,且这个「问题域」和「上下文」也比较常见,那么这个「架构风格」在这个「问题域」和「上下文」的应用就是「架构模式」! - **可以少说两个字** # 参考资料 - [Microsoft Azure文档](https://docs.microsoft.com/zh-cn/azure/architecture/guide/architecture-styles/) - 《Design Patterns:Elements of Reusable Object-Oriented Software》 GOF - 《Architectural Patterns and Styles》Renan Johannsen de Paula Venilton FalvoJr - [《Architectural Styles and the Design of Network-based Software Architectures》Roy Thomas Fielding](https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm) - [List of Software Architecture Styles and Patterns](https://en.wikipedia.org/w/index.php?title=List_of_software_architecture_styles_and_patterns) - [Architectural Pattern](https://en.wikipedia.org/wiki/Architectural_pattern)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
程序员的修行-《1.高效chrome插件》
本文作者:TheBeauty原文地址:https://www.cnblogs.com/thebeauty/p/8086926.html 前言 Chrome浏览器无论是作为浏览器市场的NO1还是其强大的跨平台能力以及丰富的扩展插件,一直是许多开发者的首要选择的浏览器。chrome浏览器也因为其丰富的Chrome插件,帮助开发者们在开发流程中极大地提高开发效率。 那么有哪些插件是开发人员最常用的chrome插件呢?今天我们chrome插件网就整理了十款开发者常用的Chrome 插件推荐给大家,让chrome成为所有开发者的开发利器。 1.掘金Chrome插件:帮你发现干货 不管你是开发者、设计师还是产品经理,想必每天都需要阅读大量的行业相关文章,这就需要我们浏览大量的互联网站点去寻找我们需要的内容。抛开繁复的筛选成本不说,「比特级」的内容都会压得你喘不过气来。掘金为了解决这个问题,开发了掘金 Chrome插件,掘金 Chrome 插件聚合了国内外优质的互联网站点内容,在节省你的筛选成本的同时,帮你发现好内容。 使用地址 http://www.cnplugins.com/devtool/ju...
-
下一篇
分布式事务,原来可以这么玩?
多个数据要同时操作,如何保证数据的完整性,以及一致性? 答:事务,是常见的做法。 举个栗子: 用户下了一个订单,需要修改余额表,订单表,流水表,于是会有类似的伪代码: start transaction; CURD table t_account; any Exception rollback; CURD table t_order; any Exception rollback; CURD table t_flow; any Exception rollback; commit; ● 如果对余额表,订单表,流水表的SQL操作全部成功,则全部提交 ● 如果任何一个出现问题,则全部回滚 事务,以保证数据的完整性以及一致性。 事务的方案会有什么潜在问题? 答:互联网的业务特点,数据量较大,并发量较大,经常使用拆库的方式提升系统的性能。如果进行了拆库,余额、订单、流水可能分布在不同的数据库上,甚至不同的数据库实例上,此时就不能用数据库原生事务来保证数据的一致性了。 高并发易落地的分布式事务,是行业没有很好解决的难题,那怎么办呢? 答:补偿事务是一种常见的实践。 什么是补偿事务? 答...
相关文章
文章评论
共有0条评论来说两句吧...