回顾Bob大叔的简洁架构(转)

从CVS到Git:为什么Bob大叔都爱用分支?手把手教你用TortoiseGit玩转特性分支工作流 本文探讨了从CVS到Git的版本控制演进,重点解析了Git分支的轻量级设计及其在特性分支工作流中的应用。通过TortoiseGit工具,详细演示了如何创建、管理和合并特性分支,帮助开发者高效协作并保持代码库整洁。文章还分享了分支命名规范和生命周期管理等最佳实践,适合从SVN转向Git的团队参考。 阅读详情

Robert Martin 就是我们常说的Bob大叔,是码界的骨灰级人物了,在4年前提出了所谓的简洁架构,值得回顾反思一下,看看是否可以借鉴到微服务中呢?

大叔在文中介绍了一下几种知名的架构思想:

  • Alistair Cockburn 的Hexagonal Architecture

  • Jeffrey Palermo 的 Onion Architecture

  • Screaming Architecture 在Bob 大叔的博客上

  • DCI 是 James Coplien, 和 Trygve Reenskaug提出的架构模型

  • BCE 是 Ivar Jacobson 在其著作 Object Oriented Software Engineering: A Use-Case Driven Approach 提出的

    尽管这些架构模型在细节上有各种各样的不同,但Bob大叔认为是相似的,都有着相同的目标,那就是——关注点分离(分而治之?),通过关注点分离把软件分成若干层,系统都是这样的:

  1. 独立的框架。架构不依赖于功能丰富的软件库,把框架作为工具而不是系统的约束。

  2. 可测性. 商务逻辑可以不依赖TUI, 数据库, Web , 或其他外部元素就可以测试。

  3. 独立的UI. 无需改变系统的其他部分就可以轻松地改变,例如 一个 A Web UI 换成控制台UI,而无需改变业务逻辑。

  4. 独立的数据库.业务逻辑不与数据库绑定,可以在各种数据库间切换例如 Oracle 和SQL ,Mongo与 BigTable、 CouchDB等。

  5. 外部代理的独立性. 事实上,业务逻辑需要简化到无需知道外面的世界。

     因此,大叔提出的简洁架构试图将这些架构集成为一种简单的表达形式。

这一架构工作的最高原则就是依赖原则。这一原则说明源代码依赖指向内部的,内圆不知道外圆的一切, 特别地,外圆中声明的东西不需要被内圆中的代码涉及,包括函数,类,变量以及其他的软件实体。同心圆代表了软件的不同领域。一般地,越深入负杂,软件的层次越多。外圆代表机制,内圆代表策略。同样的,外圆中的数据格式也不应被内圆使用,尤其是那些被外圆中的框架所生成的数据格式,并不希望外圆影响到内圆。

实体 (Entities)

实体封装了企业级的业务逻辑。一个实体可以是一个带有方法的对象,或者一个数据结构和函数的集合,实体可以被企业内的多个应用使用。如果没有企业只是写单个应用的话,这些实体就是应用的业务对象。他们在外部变化时改动最少,例如,不希望页面导航的改变影响到实体对象的改变或者安全性。应用的操作性改变不应该影响实体层。

用例 (Use cases)

这一层的软件代码包含了应用相关的特定业务逻辑,封装了所有的系统用例。这些用例编排了实体之间的数据流,目标是将实体指向企业层面的业务规则。同样,我们不希望这一层影响到实体,也不希望这一层被外部元素所影响(例如 数据库, UI,  或其他通用框架)。然而,希望应用操作的改变影响这一层的用例,如果一个用例的实现细节改变了,这一层的一些代码一定受到影响。

接口适配器 (Interface Adapters)

该层的软件是一组适配器的集合,这些适配器将数据转换成用例和实体方便使用的格式,以及一些外部代理方便使用的格式。例如数据库或者Web。例如,一个包含MVC架构的图形界面,Presenters, Views, 和 Controllers 都位于该层。models就像数据结构,从controllers传递到use cases,然后从用例返回到presenters 和 views。

类似的,来自实体和用例的数据会被转换到驻留框架,例如数据库。这一层没有向内的代码来感知外部的数据库。如果数据库是一个SQL 数据库的话, 那么所有SQL被限制在该层,这一层中特殊的部分处理数据库。这一层中还有其他一些适配器转换外部服务的数据到内部使用的用例和实体。

框架与驱动(Frameworks and Drivers)

最外层由框架和工具组成,如数据库,Web框架等。 一般地,不需要写大量的代码就可以和内部的圆进行通信了。这一层细节密布,Web 是细节实现,数据是另一种细节,把他们保持在外可以减少伤害。

Bob大叔的简洁架构只有四层么?绝对不是的,这些圆不过是示意而言,可以远多于4层的。但依赖原则总是适用的,最外圈总是底层的具体实现。

右下角的框图展示了是如何跨越边界的,描绘了Controllers 和Presenters 如何与下一层的用例通信。注意一下控制流,开始于controller, 穿过用例在presenter中执行。这也是源代码依赖,向内执行用例。这就是通常使用的DIP,在Java中,可以通过接口和继承关系来实现跨边界的控制流,动态的多态性可以跨越这一架构的所有边界。跨越边界的典型数据是简单的数据结构。可以使用基本结构或者简单的数据传输对象,或者函数的调用参数,重要的是相互隔离。例如,很多数据库框架都在查询时返回一个数据集, 最好不要让它跨边界传递,它违反了依赖原则即内圆知道了外圆的事情。

回顾

通过将软件分层,遵守依赖原则,形成内在的可测性,隔离外部的元素并具备可替代性,如此而已。

简洁架构更像是一种指导性的原则,核心同样是关注点分离和分层感知,没有摆脱企业级应用架构的经典观念。

如果联想一下复变函数中的保角变换,这 Clean Architecture 就会变成我们熟知的有趣模样了.......

原文链接:https://blog.youkuaiyun.com/wireless_com/article/details/58608154

当Kmer遇到多倍体:复杂基因组Survey分析中的避坑指南 本文针对小麦、棉花等多倍体及高杂合复杂基因组的Survey分析,深入解析了Kmer分布图解读中的常见陷阱。文章重点探讨了如何超越理想二倍体模型,利用Smudgeplot等工具准确判断基因组倍性,并提供了从参数优化、污染判断到结果验证的全流程实战指南,帮助研究者规避错误,获得更准确的基因组大小、杂合度等关键信息。 阅读详情

相关推荐

【保姆级教程】不到一元32位芯片 DIY迷你时钟

基于不到一元的CH32V003F4P9芯片制作的迷你多功能时钟。

twen51的博客 1813

回顾Bob大叔的简洁架构

Robert Martin 就是我们常说的Bob大叔,是码界的骨灰级人物了,在4年前提出了所谓的简洁架构,值得回顾反思一下,看看是否可以借鉴到微服务中呢?

我相信...... 6400

从部署到养成:Hermes智能体接入DeepSeek与微信机器人的完整实战指南

智能体(Agent)正成为大模型从“对话”走向“行动”的关键形态。它通过拆解指令、调用工具、执行任务,让AI真正参与工作流。Hermes作为可本地部署的开源智能体框架,支持接入DeepSeek等主流大模型,并提供网关、工具调用、记忆管理等模块化能力。从Docker容器部署到微信机器人桥接,从自动化定时任务到Computer Use桌面控制,Hermes将个人助理从概念落地为可运行的工程系统。本文基于真实实践,梳理架构原理、部署流程、API配置与高频故障排查,为技术玩家提供一套从零到一的上手指南。

weixin_29045001的博客 263

简洁架构之道_读书笔记

1.结构化编程Bohm和jocopini证明了可以使用顺序结构、分支结构、循环结构构造出任何程序goto是有害的顺序结构、分支结构和循环结构均可以证明其正确性,并且用这三种结构可以构造出任何程序。那么这就意味着可以将模块可以按功能进行降解拆分为一系列函数,而这些函数可以用结构化编程范式来写。只要这些函数是正确的,那么整个程序就是正确的。Dijstra:测试只能展示bug的存在,不能证明bug不存在结构化编程方式最有价值的地方在于它赋予了我们创造可以证伪程序单元的能力。

Mr.Andy的博客 639

Windows 11下WSL2安装CUDA避坑指南:从驱动版本匹配到环境变量配置

本文详细解析了在Windows 11的WSL2中搭建CUDA开发环境的完整流程与核心避坑要点。关键在于理解“驱动在Windows,工具链在Linux”的独特架构,并确保显卡驱动与CUDA Toolkit版本严格匹配。指南涵盖了从驱动验证、WSL-Ubuntu专用仓库安装、环境变量配置到GCC版本冲突、GPU算力不匹配等常见问题的解决方案,帮助开发者高效构建稳定的深度学习与高性能计算环境。

smartcontract5的博客 466

Mac 安装neo4j(解压版)最新版本教程

本文介绍了在Mac M系列操作系统上安装Neo4j图数据库的具体步骤。内容包括:从官网下载解压版Neo4j社区版压缩包;通过终端命令将其解压到/opt目录并重命名;配置环境变量以便全局访问;以及常用命令如启动/停止服务、重置密码等。安装完成后,用户可通过浏览器访问http://localhost:7474,使用默认账号neo4j/neo4j登录并根据提示重置密码。该教程简洁明了地指导用户完成Neo4j在Mac上的安装配置过程。

猿小白的博客 909

向世界级软件开发大师“Bob 大叔”Robert C. Martin 提出你的疑虑!

出品丨AI 科技大本营(ID:rgznai100)函数式编程作为一种编程范式,其根源可以追溯到 20 世纪 30 年代,当时数学家们正在探索计算理论的基础。1936 年,阿隆佐·丘奇提出了 λ 演算(Lambda Calculus),这是一种形式系统,用于表达函数抽象、函数应用以及变量绑定。丘奇的 λ 演算为函数式编程奠定了理论基础。同年,艾伦·图灵提出了图灵机的概念,这是一种理论上的计算模型,能...

程序人生的博客 423

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

架构简洁之道

封装 继承 多态 依赖倒置:低层的实现细节依赖于高层的抽象。高层规定了接口?如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用抽象类型/抽象接口,而非具体实现。创建对象都存在源代码级的依赖。因此,选用抽象工厂这个设计模式。 不要在具体实现类上创建衍生类。 面向对象编程就是以多态为手段来对源代码中的依赖关系进行控制的能力,这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署。 SOLID原则的主要作

novanova2009的博客 625

“华为杯”研究生数学建模竞赛2020年-【华为杯】D题:无人机集群协同对抗(附获奖论文和MATLAB代码实现)

1.问题重述摘 要:本文针对非线性约束条件下红蓝双方无人机集群协同对抗的最优规划问题,结合贪婪队形、非线性规划、内点法、蒙特卡洛方法和全联立正交配置有限元法,构建了无人机集群协同对抗推演模型。,构建了。我们综合考虑了,和。首先分析红方在集群约束下的贪婪队形和拦截策略,然后我们基于内点法联合MATLAB和AMPL编程求解蓝方突防的非线性规划解,最后基于蒙特卡洛法对整个蓝方突防过程进行推演,得到突防概率图。通过推演,我们提出了两块的区域作为所求区域,并对蓝方的最优突防策略进行分析。

getusushu的博客 1550

深入浅出讲解外部服务提供者 OAuth 2.0 帐户客户端创建与 ABAP 系统集成

本文详细介绍了在SAP ABAP平台配置OAuth 2.0客户端以安全调用外部Web服务的完整流程。主要内容包括:首先需要在外部服务提供者平台注册OAuth客户端,获取client ID和client secret;其次需特别注意重定向URI必须是公开可访问的地址;然后在ABAP系统中通过事务码OA2C_CONFIG配置OAuth客户端信息;最后阐述了常见的错误排查方法。文章强调了OAuth 2.0作为SAP系统与外部服务安全集成的标准协议,正确配置客户端是确保后续API调用安全可靠的关键前提。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1734

世界级编程大师Bob大叔:“35岁危机”是错觉,我们这些“老程序员”都还在,只是数量上不显眼...

Bob解答程序员的“35 岁危机”:认为编程只适合年轻人的想法其实是个错觉,但确实是个很有影响力的错觉。这种错觉之所以存在,是因为过去 70 年里,对程序员的需求像坐火箭一样飙升。其实我们这些“老程序员”都还在,只是数量上不那么显眼罢了。作者 |王启隆出品 | 《新程序员》编辑部想象一下,如果你这辈子写了五十多年代码,并且直到 71 岁还在编程,那你会如何看待现在这个 AI 编程爆火的时代?R...

优快云资讯 1711

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

软件行业进入“黑暗时代”,Bob大叔开启“整洁三部曲”,正式清理门户

12岁就在编程界展露头角、13岁造出自动打字机、16岁开发出PDP—8汇编器,Robert C. Martin是当之无愧的世界级编程大师。如今,他是设计模式和敏捷开发先驱、敏捷联盟首任主席、C++ Report前主编、Object Mentor公司的总裁,他被后辈程序员尊称为“Bob大叔”。 在我认识的人中,Bob大叔是最聪明的之一,他对编程有着无尽的热情。如果有人能拨开围绕敏捷的层层迷雾,那就一定是他。 ...

优快云 官方博客 6763

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

再读Bob大叔三部曲之代码整洁之道

再读代码整洁之道

Micky613的博客 785

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

编程的未来 Java, C, Go, Swift, Dart? Uncle Bob Martin - The Future of Programming

说明 周末刷了一下视频 – 编程的未来,1942年出生的Bob大叔,1个小时20分钟全程手舞足蹈的讲解了编程的历史和未来。感触挺深,所以特地来分享一下。1970年开始从事编程工作(18岁),敏捷的鼻祖,Robert C. Martin 著著名书籍有《敏捷软件开发 原则、模式与实践》、《架构整洁之道》。 youtube视频链接如下: “Uncle” Bob Martin - “The Future of Programming” 刀跟火种的年代 1945第一台计算机,1位数程序员 毫无疑问这就是计算机之父T

AI架构师易筋 968

整洁架构设计分析--架构设计的本质是什么?

整洁架构算是计算机领域里必读的经典书籍之一啦,网上零零散散有些相关的阅读笔记和经验总结。最近Go 招聘的号主卷神博大也在开始分享这方面的内容,还分析各个大佬的阅读笔记。关于书中一直在提到的...

kevin_tech的博客,微信搜「网管叨bi叨」 954

极客大学架构师训练营 编程的本质与未来 第三课 听课总结

说明 回顾 http://uml.org.cn/appCase/200701244.asp 李智慧老师从初级工程师到首席架构师的跃迁 李智慧老师,第一份工作是05年做日本的一个大型系统,那个时候前端是VB,服务端是用Java。刚开始的时候,一共也是几个人。最开始进去时候发现用VB调用Java Server,还没有办法直接调用。那个时候高手都到日本出差去了,李智慧老师给项目经理说了这个gap。项目经理也不懂技术,项目经理就说既然你提出这个问题,你就负责做这个组件吧。李智慧老师周末就看了Struts的架构,

AI架构师易筋 2718

【提问募集】向世界级软件开发大师“Bob 大叔”Robert C. Martin 提出你的疑虑!

“程序员应该每年学习一种新语言。”

《程序员》官方BLOG 8251

架构整洁之道 电子版_Bob叔新书来啦!“整洁三部曲”总算圆满了

程序员书库(ID:CodingBook) 猿妹综合整理提到Bob叔叔,第一个想到的就是他那本著名的《代码整洁之道》:在这本书里,Bob叔有句名言:任何一个傻瓜都能写出计算机可以理解的代码,惟有写出人类容易理解的代码,才是优秀的程序员。《代码整洁之道》在豆瓣上评分高达9.1,贴上评价你就知道这本书有多受欢迎了:还有另外一本《代码整洁之道:程序员的职业素养》也是程序员桌上必备的参考书之一,豆瓣评分高达...

weixin_39942213的博客 677

开卷有益:架构整洁之道

架构即设计,一切为了可持续发展道路。

m0_46428737的博客 215

[翻译]Bob大叔:反思极限编程

译者注: Bob大叔14年后再次谈论极限编程。极限编程经历了14年的风风雨雨后,Bob大叔将会给它怎么样的定义那? 在我手中拿着的一本白皮薄书,在14年前彻底的改变了软件世界。这本书的标题是解析极限编程,副标题是拥抱变化。作者是Kent Beck,出版时间为1999年。 这本书很薄,不到200页。排版很宽,间隔很远。写作风格即自由散漫又平易近人。章节不多,概念...

weixin_30677475的博客 150

《代码整洁之道》(Clean Code)- 读书笔记

一、关于Bob大叔的Clean Code   《代码整洁之道》主要讲述了一系列行之有效的整洁代码操作实践。软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。这本书的阅读对象为一切有志于改善代码质量的程序员,书中介绍的规则均来自作者Bob大叔多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。 ...

weixin_30545285的博客 224

读书:《代码整洁之道》

[size=large]1. 本书内容概要 核心观点:Bob大叔(即Robort.C.Martin,多本畅销书的作者,业界称其Bob大叔)认为软件质量,不仅依赖于架构及项目管理,而且与代码质量紧密相关。而代码质量与其整洁度成正比。 核心内容:Bob大师和Object Mentor的专家以这个强大团队十几年的经验,总结了如何在代码中达到clean code,即整洁和干净的代码的经验规则。 豹:...

T240178168的博客 265
上一篇: 关于软件中头像(图标)保存方式的讨论
下一篇: 软件架构系列感想(一)
e5Max
博客等级 码龄14年 145粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值