前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件架构编年史

软件架构编年史

作者头像
张逸
发布2023-03-23 15:58:27
5510
发布2023-03-23 15:58:27
举报
文章被收录于专栏:斑斓斑斓

《软件架构编年史》

作品连载

《软件架构编年史》是Herberto Graca的系列作品,我在ThoughtWorks的同事覃宇在征得作者同意与授权后,在简书陆续发布了该系列的译文。该系列回眸了软件架构的发展历程,对主流的架构模式与设计方法进行了系统的梳理和介绍,可以作为架构师的入门读物。

我见之心喜,认为这样的好文章不可错过,赶紧联系覃宇兄,得到了他的授权,允许在我的公众号「逸言」上首次发布这一高价值的系列文章。

从2021年3月11日开始,每周一、周四的上午九时,我会准时发布《软件架构编年史》的系列文章,欢迎关注和分享,借此机会感谢Herberto Graca和覃宇的无私奉献!

覃宇,(曾经的)Android开发者/ThoughtWorks技术教练//译者,热衷于探究软件开发的方方面面,从端到云,从工具到实践。喜欢通过翻译来学习和分享知识,译作有《Kotlin实战》、《领域驱动设计精粹》、《Serverless架构:无服务器应用与AWS Lambda》和《云原生安全与DevOps保障》。

译者:最早看到的是作者的这篇文章(译文),其中的那副信息图可谓集软件架构之大成。后来发现这是作者学习和思考软件架构发展史的系列文章之一。“以史为鉴,可以知兴替”,阅读历史就是学习的过程。翻译也不例外,我也是通过阅读和翻译来学习软件开发的历史,联系作者获得授权之后便有了这一系列译文。

这是软件架构系列的第一篇文章。我将我对软件架构的学习过程和思考以及我是如何运用这些知识的写成这一系列文章。

我把这一系列文章称为“软件架构编年史”,并不是因为我觉得自己的文笔不错,而是想用一种有趣的方式旧调重弹!😀

在第一篇文章里,我将谈谈我撰写这一系列的原因和接下来的计划。

◐ 学习历史的重要性

不学习历史的人注定要重复错误。——温斯顿.丘吉尔

我发现从历史中学习十分重要,历史可以教给我们很多东西。在个人层面,我们(最终有望)从自己的失败中学习。在国家层面,历史帮助形成我们的文化,创造群体思想,“我们”的思想,国家的同一性。它还能帮助我们从祖先的错误中学习,比如错信一些人的疯狂思想,想想第二次世界大战...

对我们开发者来说,历史帮助我们在前辈们的知识上前进。它帮助我们从前辈们的知识:错误、经历和经验中学习。它帮助我们“站在巨人的肩膀上”更上一层楼!

在我向更好开发者前进的成长之路上,我浏览过许多文章,观看过许多会议演讲,也阅读过许多书籍。我尽可能地站在巨人的肩膀上!

然而我一直有一个困惑,这些观点发展出其它许多观点,又继续发展出更多的观点...这就好比“传话游戏”,论文、文章或者书籍原本要表达的思想最后终会被扭曲。

于是我开始在互联网上淘宝,寻找表达这些概念的原始论文、文章和书籍,我觉得它们是我工作中最重要的概念,我自己也时常思考它们。

在我尝试以某种考古方式理解这些概念如何形成的过程中,我的思考就形成了这一系列文章。

撰写这些文章强迫我大量阅读和思考这些主题,这帮我理解现代软件开发中使用的技术。我希望这些文章内帮到更多后来的开发者。

然而,如果你读到任何不理解或者有异议的内容,请让我知晓。我对这些主题的讨论持完全开放的态度,希望可以从他人那里学习,当我被证明犯错时我会改变我的观点。

◐ 时间线

下面是我在阅读所有这些主题的文章和书籍之后总结的一条软件开发发展的粗略的时间线。我找到的关于确切时间的参考资料都作为链接加入了时间线,拿不准的时间我都加上了“~”,表示“大约”是这个时间。我们还可以在维基百科的编程范式主页上找到大量相关的内容。

这里列出的大多数话题都将在这个系列中谈及。

20 世纪 50 年代

非结构化编程

~1951 – 汇编

20 世纪 60 年代

结构化编程

分层: 用户界面、业务逻辑数据存储都在一层。

~1958 – Algol

20 世纪 70 年代

过程式/函数式编程

~1970 – Pascal

~1972 – C

1979 – MVC 模式(Model-View-Controller)

20 世纪 80 年代

面向对象编程 (但其思想在 20 世纪 60 年代晚期已经第一次提出)

分层: 两层,第一层是用户界面,第二层是业务逻辑和数据存储

~1980 – C++

CORBA – 通用物件请求代理架构(尽管1991年才推出第一个稳定版,但最早使用可以追溯到 20 世纪 80 年代)

~1986 – Erlang

~1987 – Perl

1987 – PAC 即 HMVC 模式(Hierarchical Model-View-Controller)

1988 – LSP(里氏替换原则) (~SOLID)

20 世纪 90 年代

分层: 三层,第一层是用户界面,第二层是业务逻辑(以及浏览器作为客户端时的用户界面展现逻辑),第三层是数据存储

~1991 – 消息总线

~1991 – Python

1992 – EBI 架构(Entity-Boundary-Interactor) 即 EBC 或 EIC

~1993 – Ruby

~1995 – Delphi, Java, Javascript, PHP

1996 – MVP 模式(Model-View-Presenter)

1996 – OCP, ISP, DIP (~SOLID), REP, CRP, CCP, ADP

1997 – SDP, SAP

~1997 – 面向方面编程

~1997 – Web 服务

~1997 – ESB – 企业服务总线 (尽管创造该术语的书籍2004年才出版,但这个概念早已被使用)

21 世纪 00 年代

2002 – SRP (~SOLID)

2003 – 领域驱动设计

2005 – MVVM 模式(Model-View-ViewModel)

2005 – 端口和适配器架构即六边形架构

2006? – CQRS 与 ES (命令查询职责分离与事件溯源)

2008 – 洋葱架构

2009 – 微服务(Netflix)

21 世纪 10 年代

2010 – DCI 架构(Data-Context-Interaction)

2012 – 整洁架构

2014 – C4 模型

◐ 软件架构编年史系列

整个《软件架构编年史》的内容包括:

  • 软件架构编年史
  • 软件架构预述
  • 编程语言的演化
  • 架构风格 vs. 架构模式 vs. 设计模式
  • 单体架构
  • 分层架构
  • MVC 及其变种
    • 1979 – Model-View-Controller
    • 1987/2000 – PAC / Hierarchical Model-View-Controller
    • 1996 – Model-View-Presenter
    • 1998 –”Model 1″ & “Model 2”
    • 2005 – Model-View-ViewModel
    • ???? – Model-View-Presenter-ViewModel
    • 2008 – Resource-Method-Representation
    • 2014 – Action-Domain-Responder
  • EBI 架构
  • 包与命名空间
  • 领域驱动设计
  • 端口和适配器架构(六边形架构)
  • 洋葱架构
  • 整洁架构
  • 事件驱动的架构
  • 从 CQS 到 CQRS
  • 面向服务的架构(SOA)
  • 清晰架构(01):融合 DDD、洋葱架构、整洁架构、CQRS...
  • 清晰架构(02):超越同心圆分层
  • 清晰架构(03):在代码中展现架构和领域
  • 清晰架构(04):用文档描述架构
  • 一个项目的演进:从 MVP 到 P
  • 4 + 1 架构视图模型
  • 架构的质量属性
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 逸言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档