探寻软件架构的本质,到底什么是架构?

京东云开发者|探寻软件架构的本质,到底什么是架构? 定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图,对架构进行完备的定义是不可能的。“道可道,非常道。名可名,非常名”。行业内不同的组织和个人从不同的视角对 “什么是架构” 进行了定义或阐述。IEEE 关于架构的定义将系统架构定义为:架构是系统组织结构 + 组件及联系(组件间以及组件和环境之间) + 原则的组合。 阅读详情
不论是开发人员还是架构师,我们都一直在跟软件系统打交道,架构是在工作中出现最频繁的术语之一。那么,到底什么是架构?你可能有自己的答案,也有可能没有答案。对“架构”的理解需要我们不断在实践中思考、归纳、演绎,形成自己的认知。

1 到底什么是软件架构 ?

定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图,对架构进行完备的定义是不可能的。

“道可道,非常道。名可名,非常名”,道是如此,架构亦是如此。

行业内不同的组织和个人从不同的视角对 “什么是架构” 进行了定义或阐述。

IEEE 关于架构的定义

the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing ites design and evolution         --ANSI/IEEE

将系统架构定义为:架构是系统组织结构 + 组件及联系(组件间以及组件和环境之间) + 原则的组合。通过图形化的形式表述该架构定义如下图所示,这是一个非常简洁、概念清晰的定义,其言简意赅的表达了架构的几个核心要素:

  • 系统的组织:表达系统的宏观结构

  • 组件及联系:组件化的思维,同时突出了环境要素。组件表达了系统的模块化,组件相互之间及组件与环境之间的关联表达元素间的相互作用。

  • 原则:用于指导设计和系统演进的原则

图片

大师 Martin Fowler和Ralph Johnson对于架构的定义有着类似的、更加简洁和抽象,Martin Fowler 认为软件架构是:重要并且难以改变的决策。架构设计是关于权衡的艺术,架构设计过程中充满了各种各样的决策,这些决策也终将反应系统架构。

Software Architecture = Important and hard to change decisions   --Martin Fowler
The software architecutre is the important stuff ! Whatever it is !   --Ralph Johnson

以上的定义从高层抽象视角对什么是架构给予了自己的回答,相比之下,Neil Ford 在《软件架构基础》一书中对架构给出了更具象的阐述,其从架构组成元素入手,从更偏向实践的角度对架构进行了阐述。核心思想是软件系统的架构包括以下组合元素:

  • 结构:应用系统所选择的架构风格,比如微服务架构、单体架构还是SOA等

  • 架构属性:系统的非功能性属性,比如性能、可用性、可维护性等

  • 架构决策:系统设计过程中重要的架构决策

  • 设计原则:设计过程中的指导性原则

图片

结构

结构是系统架构的重要组成部分,其从宏观上表述了系统的结构组成。架构设计的核心任务之一是为系统选择合适的架构风格。比如,架构师基于上下文的权衡,可以选择模块化单体架构风格,也可以选择微服务架构风格。

图片

架构属性

架构属性亦称质量属性,或非功能属性,通常表示系统需要具备或满足的某种 “能力”,比如高性能、可扩展性、弹性、伸缩性、容错性、可测试性、可维护性等等。架构设计的目标需要关注系统需要满足的架构属性,架构最终要体现对架构属性支持的相关架构决策。架构属性众多,系统需要关注的是这些架构属性的子集,具体的某次特定的架构设计所需要关注的架构属性需要依据问题域的上下文而具体分析。同时,不同的架构属性间可能存在冲突,这种情况同样需要架构师的权衡和决策。

图片

架构决策

架构决策是系统架构设计过程中对解决方案的选择,其描述了系统必须遵循的规则。架构决策随着权衡分析而自然存在,其是系统架构设计的重要维度之一。并不是所有的决策都是架构决策,架构决策应该关注对系统有重要影响的部分。比如对架构风格的选择对系统存在重要影响,其改变的成本较高,理当属于架构决策的范畴。比较典型架构决策包括但不限于:

  • 直接影响高优先级的架构属性

  • 修改对外接口:对外提供的接口修改往往需要进行充分影响分析

  • 引入或者移除依赖:依赖的加入和移除往往标示着组件能力的引进和废弃

  • 改变系统的通用结构:工程结构是应用架构的重要维度之一

  • 迫使研发人员改变开发方式

  • 接受战略性技术债:重构影响较大的技术债往往对现有系统会有较大影响

注:架构决策建议以轻量级的文档化形式进行记录,参考文章 《轻量级的架构决策记录机制》一文

设计原则

设计原则与架构决策不同,其本质区别是:设计原则是一种指导,而非强制的规则。架构决策需要遵守,设计原则提供参考性指引。

比如,设计原则可能是:在可能的情况下,跨系统间的通信尽可能使用异步消息机制以提高性能和降低耦合。

2 架构设计的边界

如果你是团队的架构师,你是否有以下困惑:

  • 系统的架构应该设计到什么粒度?

  • 架构设计是否要足够详细以便能直接指导开发人员开展编码工作?

如果你是团队的核心开发人员,你是否 “抱怨” 过:

  • "架构设计" 太过详细,涵盖了实现的 “细枝末节”,自己除了CRUD没有发挥的空间

  • "架构设计" 太过宏观,基于设计方案根本无法指导开发,自己还得重新设计

图片

很多架构师自身对架构和设计的边界缺乏深入认知,相比于对架构边界的缩小,更多时候会出现架构设计边界放大的情况:

架构师把架构设计当作详细的技术方案设计,牢牢把控系统实现的所有细节,产出大量的设计文档,然后交由核心开发人员做代码实现的执行工作。

这种现象会导致如下问题:

  • 压缩了团队核心开发人员的设计发挥空间,不利于其技术水平及认知的提升

  • 作为架构师你真的能讲所有的细节都Cover住吗?即使耗费巨大精力完成了 “完备” 的设计,来自一线开发所面临的各种场景是否能够提前预知和捕获?

  • 如果需求迭代持续如此,作为核心开发人员多半会有所 “怨言”

  • 作为团队的架构师精力有限,持续的细节输出会耗费巨大精力,而无法关注更加宏观的层面

  • .......

以上问题的根源是什么?不能明确架构设计的边界!

  • 架构设计与设计(实现相关)的边界或粒度问题

  • 团队架构师与开发人员间的职责边界

判断架构边界的前提之一是:明确架构和设计的关系!

所有的架构都是设计,但设计不一定是架构!

从架构的定义看架构设计的边界,选取两个视角:

  • 架构是系统中重要的东西!无论它是什么(之所以重要,是因为改变的成本高)

  • 架构设计涵盖系统中重要的架构决策

所以,架构设计应该涵盖系统中重要的东西,这些 “重要的东西” 可能是:

  • 应用架构风格的选择

  • 子系统间信息通信的方式

  • 工程采取的分层以及层间约束

  • 工程应该遵循的开发规范

  • 工程引入的三方类库,或者三方框架

  • 高优先级的架构属性:比如某次需求建设非常关注系统的性能,或者扩展性等架构属性

  • 其它 "重要的东西"

架构设计涵盖了系统所需的重要的架构决策,从宏观层面对系统实现予以指引。而详细的设计则为具体的开发实现提供指导,比如,详细的E-R图设计、具体的代码级别的模式选择、某个组件的具体实现等等。

架构不是一成不变,需要持续演进,而实现相关的设计也可能在项目进行中持续变化,因此,二者不能完全割裂,而是需要在实现过程中进行双向反馈:

  • 架构设计信息要高效的同步至开发人员

  • 实现过程中的变更同样也要回向反馈至架构,以便对架构设计进行调整

图片

在进行架构边界判定时要注意一个至关重要的因子:上下文!!!以上的判断准则必须要给定的上下文中才有价值。

比如:实现过程中大家经常会适用一些设计模式,例如策略模式。那么,这种设计模式的选择是属于架构设计还是详细的实现设计?答案就是:It depends!!! 具体情况,具体分析。

图片

如果当前上下文,我们非常关注系统的扩展性,该架构属性是我们高优先级的架构属性,那么,核心模块的策略模式的应用可以看作是架构设计的范畴。而如果上下文中扩展性不是我们关注的高优先级的架构属性,相比我们更关注性能,那么,这种代码级的设计模式选择应该属于架构设计的范畴之外了,而需要划分到实现设计层面,交由核心开发自主决定。

3 架构模式(Patterns)与架构风格(Styles)

架构模式和架构风格是极容易混淆的两个概念,很多开发人员将其理解为同一事物,而实际上二者有本质区别。

  • 架构风格是系统设计的顶层抽象,从宏观视角表述我们的系统组成。更进一步,架构风格聚焦于系统的分层、模块以及交互形式。

  • 架构模式聚焦于对重复出现问题提供解决方案

二者概念不同,并不存在冲突,其联系如下图所示:

  • 架构模式可以应用于架构风格,在同一架构风格上下文内可以应用一或多中架构模式

  • 架构风格可以组合以产生新的架构风格

图片

比较典型的例子是CQRS:CQRS本身是一种模式,将命令和查询的职责在不同维度进行分离。该模式我们可以在单体架构风格中使用,也可以在微服务架构风格中使用,当然也可以在SOA架构中使用。

图片

4 为什么要做架构设计 ?

至于 “为什么要做架构设计” 也是一个古老且频繁出现的问题,有太多的文章阐述为社么要架构设计:有的宏观,有的具体,有的“务实”,有的“务虚”。我把这个问题作为一个独立章节阐述,并不是想进行大篇幅的论述,只是想突出它的重要性,这个问题值得耗费一些精力去深入理解其背后的原因。但,在此不做展开过多说明,通过一句话来进行概括:

之所以要进行架构设计,是因为:重要 !

  • 做,收益高

  • 不做,成本高

5 开发人员和架构师的知识模型

作为开发人员,更加关注知识的深度,以便有足够的知识储备满足工作需要。开发人员在职业生涯的早期,应该关注于自身知识储备的增长,并保持技术深度。

图片

作为架构师,之所以技术的广度比深度更重要,是因为架构师的重要职责之一是进行架构决策。系统架构设计是关于权衡的艺术,在特定的问题域上下文下,架构师需要在诸多可行的解决方案间进行权衡和决策,这也对其技术广度提出了要求。开发人员成长为架构师,应该更加关注知识的广度,并在几个特定领域深耕,以便有足够的知识支撑架构决策。

图片

虽然开发人员和架构师在知识域的关注点上存在差异,但在认知层面都可以统一到Bloom认知层次模型。该模型将认知层次划分为逐步递进的六个层次:

  • 识记:识别和回溯事实性知识

  • 理解:理解事实的内涵

  • 应用:将事实、规则、概念、思想加以应用

  • 分析:将信息分解、关联、区分、实验、测试

  • 评估:将信息或思想的价值进行评价

  • 创造:整合不同的信息形成新的知识体系

图片

不论是架构师还是开发人员,Bloom认知层次模型都适用。通过不断的学习扩展自身的知识体系,在识记、理解和应用的同时,要持续的培养分析、评估和创造的能力,逐步向高层次的认知水平提升。

但需要注意的是:知识不等于认知,避免陷入知识学习的陷阱。知识是无限的,没有人能够以无限的精力去学习无限的知识。不论是开发人员还是架构师,又或者其他角色,不应该只将精力投入在知识边界的扩充,而应该注重从知识到认知提升的转变。

吾生也有涯,而知也无涯。以有涯随无涯,殆矣!已而为知者,殆而已矣!    ----《庄子》

格物以致知,对表象不断的归纳、演绎直至事物的本象,探寻事物背后的规律,建立更高层的认知。这种认知层次由下及上的跃升有两种方式:

  • 悟:由内向外,通过不断积累、持续思考,由量变到质变,直至 “开悟”

  • 破:自外向内,高层次或不同的思想输入碰撞,加速认知层次的突破

图片

6 结语

对架构定义的探讨实际上是一种朴素的 “格物” 的过程,每个人都应该寻找自己的答案。跳脱对架构定义探讨的视野,大家的工作和学习何尝不是如此呢 ?!大道至简,殊途同归,格物致知,与君共勉!

运用第一性原理探寻AI本质 文章来源:宜信技术学院|宜信支付结算团队技术分享第二期-支付结算机器学习技术团队负责人 刘创 分享《AI与第一性原理》 分享者:宜信支付结算机器学习技术团队负责人 刘创 原文发布于个人博客:动物园的猪 一、AI和第一性原理 AI,也就是人工智能,这几年非常火,但究竟AI的本质是什么呢?用第一性原理来探寻AI的本质,可能更容易理解。接下来我们一起探讨AI、第一性原理、以及如何使用第一性原理来理解... 阅读详情

相关推荐

五种核心软件架构风格

本文系统介绍了五种主流软件架构风格:分层架构(按功能分层,单向依赖)、事件驱动架构(异步事件通信)、微核架构(核心+插件模式)、微服务架构(独立部署的业务服务)和云架构(云原生设计原则)。每种架构都详细阐述了核心思想、组件结构、典型应用场景及优劣势。分层架构简单实用但扩展性有限;事件驱动解耦彻底但复杂度高;微核扩展灵活但需良好契约;微服务适合大型系统但运维复杂;云架构弹性高效但存在厂商锁定风险。实际系统往往混合多种风格,架构师需根据业务规模、团队能力和技术需求进行权衡选择。

追赶时代的博客 79

什么是架构?架构的本质和作用!

架构一个系统在其所处环境中所具备的各种基本概念和属性,具体体现为其所包含的各个元素、他们之间的关系以及架构的设计和演进原则之中。架构的本质就是对系统进行有序化地重构以致符合当前业务的发展,并可以快速扩展。视角(Viewpoint):一个针对某视图所采用的观察角度的定义,是构建和使用某视图的规约的描述(通常采用一个适当的模式或模版的形式)。通俗的说,视图描述了所看到的内容;而视角则描述了站在何处进行观察——一个能够决定你所能看到的事物的制高点或角度。视图(View):针对一系列相互关联的关注点的表达。

AlbenXie的博客 549

SAP固定资产原值与净值取值逻辑全解析:从数据表到ABAP实战

在企业资源计划(ERP)系统中,固定资产的价值管理是财务会计的核心模块,其关键在于准确核算资产原值与净值。从技术原理上看,这涉及对资产全生命周期业务(如购置、折旧、转移、报废)的财务建模,以及底层数据表(如ANLC、ANEP)的精准关联与计算。掌握这一逻辑的技术价值在于,能够确保财务报表数据的准确性,满足合规性要求,并为管理决策提供可靠依据。在SAP ECC或S/4HANA系统的应用场景中,ABAP开发者与财务顾问常需通过编写报表程序,从复杂的数据结构中提取资产价值信息。本文聚焦于SAP资产会计模块,深入剖

weixin_30984001的博客 396

什么是架构?网络架构中都有什么?

什么是架构?网络架构中都有什么?01 什么是架构?1. 作为一个过程2. 作为一个结果3. 作为一门学科02 网络架构的要素1. 对于系统的正常工作,我们必须一致同意的问题2. 便于达成一致的问题3. 系统的基本模块性4. 功能依赖5. 系统中被视为持久不变的方面03 总结:关于架构的思考 作者:大数据DT 来源:大数据DT 导读:理解架构这个词的意思是十分重要的。它可能被过度使用,并且使用在各种环境中。如果缺少一致的理解,将会有交流失败的风险。那么架构这个词到底是什么意思呢? 01 什么是架构? 架

一个写湿的程序猿 1841

深入解析璞致PZ-ZU47DR RFSoC核心板:硬件架构与多通道ADC/DAC设计实战

本文深入解析璞致PZ-ZU47DR RFSoC核心板的硬件架构与多通道ADC/DAC设计实战。作为Xilinx Zynq UltraScale+ RFSoC系列的代表产品,PZ-ZU47DR集成了8通道5GSPS ADC和8通道9.85GSPS DAC,支持直接射频采样,大幅简化射频链路设计。文章详细介绍了其技术优势、设计挑战及实战技巧,为5G小基站、毫米波等应用场景提供高效解决方案。

meat5的博客 842

Mac---安装Navicat

把这个填充好的字符串放入刚才打开的RSA在线加解密的网站中的第二个框框(替换之前的请求码),第一个框框不动(还是之前第10步骤中的私钥),点击RSA私钥加密,这时会得到一个加密的字符串,这个就是激活码。{“K”:“你的K值”, “N”:“52pojie”, “O”:“52pojie.cn”, “DI”:“你的DI值”, “T”:你的时间戳}链接: https://pan.baidu.com/s/1mEVY4hnKdktg-p7DBIfD7A 提取码: twwg。Navicat会弹出一个对话框,点击“注册”

weixin_53970868的博客 1万+

阅读架构漫谈(一)笔记

什么是架构? 架构的英文是 Architecture,在 Wikipedia 上,架构是定义的大致汉语意思是: 建筑(拉丁语architect,来自希腊ἀρχιτέκτων·阿尔奇泰克顿的“建筑师”,来自ἀρχι-的“首领”和τέκτων的“建造者”)是规划、设计和建造建筑物和其他物理结构的过程和产物。 大致就是说架构是一种过程。 这个过程怎么产生的呢? 人类社会早期的时候,每个人都完全...

weixin_30396699的博客 128

OnlyOffice Docker部署全攻略:解除连接限制+文件大小限制+中文字体优化

本文详细介绍了OnlyOffice企业级Docker部署的完整解决方案,重点破解连接限制、文件大小限制和中文字体优化三大核心痛点。通过定制化镜像部署、性能调优配置和中文字体深度优化,帮助企业实现高效稳定的文档协作平台。

weixin_28837817的博客 369

认知篇(一):探寻软件架构的本质,到底什么是架构?

定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图一样,对架构进行完备的定义是不可能的。行业内不同的组织和个人从不同的视角对 “什么是架构” 进行了阐述。IEEE 关于架构的定义components, their, and theprinciples将系统架构定义为:架构是系统组织结构组件及联系(组件间以及组件和环境之间)原则的组合。

MayMatrix 的博客 319

Langchain分割方式

【代码】Langchain分割方式。

2897

动态时间规整(Dynamic Time Warping,DTW):让时间序列分析不再枯燥和代码全分析

动态时间规整(DTW)是一种用于比较时间序列相似性的算法,特别适用于处理长度不同或时间轴不对齐的序列。本文介绍了DTW的核心概念,包括其通过非线性对齐解决时间扭曲问题的能力,以及在语音识别、金融分析等领域的应用。通过Python代码示例,演示了如何计算两个模拟时间序列的DTW距离,并可视化最优对齐路径。结果显示,DTW能够有效捕捉序列间的相似模式,即使它们在时间轴上存在偏移或伸缩。该算法通过最小化累积距离来评估相似性,得分越低表明序列间相似度越高。

此星光明博客 163

软件架构的本质

认知篇(一):探寻软件架构的本质,到底什么是架构?-京东云开发者社区软件架构精要-优快云博客

zwz_home的专栏 135

出现 Connection Failed [MySQL][ODBC Driver]Access denied for user ‘root‘@x(using password:YES)解决方法

Connection Failed [MySQL][ODBC 8.0(w) Driver]Access denied for user 'root'@xxxx (using password:YES)

码农研究僧的博客 1062

探寻架构本质

点击标题下「蓝色微信名」可快速关注系统架构设计是软件开发过程中非常重要的环节,就像大厦的地基,架构是软件构建的基础,架构设计的好,系统性能、冗余性、扩展性、可维护性等等,都可能受益,反之就可能带来各种的问题,影响系统的稳定运行和功能扩展。技术社群的这篇文章《探寻架构本质》给我们讲解了架构设计中的一些本质特性,认识什么是架构,通过学习了解,可以给我们实践工作提供指导。随着技术的发展和演进,系统(指的...

bisal的专栏 272

031、速度前馈与加速度前馈

摘要: 本文通过追剪机调试案例,阐述了速度前馈和加速度前馈在运动控制中的关键作用。前馈不是高级技巧,而是解决动态响应问题的必要手段:速度前馈通过预测速度变化提前补偿,加速度前馈则针对惯量变化提供力矩补偿。实现时需注意信号平滑处理,避免噪声放大。前馈与PID分工明确,前馈承担主要动态响应,PID处理残余误差。调试应先调前馈再微调PID,前馈增益需计算而非仅凭参数调整,并允许适当残余误差。前馈作为开环补偿不会影响系统稳定性,但需配合平滑的指令生成器使用。(149字)

m0_50546716的博客 293

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

探寻block的本质(一)

面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMutableArray,需不需要添加__block? 首先对block有一个基本的认识block本质上也是一个oc对象,他内部也有一个isa指针。block是封装了函数调用以及函数调用环境的OC对象。 探寻block的本质 首先写一个简单的block int main(int argc, const.

铭记_ 508

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

探寻Class的本质

iOS底层原理总结 - 探寻Class的本质 对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索问题的本质内容。 Class的本质 我们知道不管是类对象还是元类对象,类型都是Class,class和mete-class的底层都是objc_class结构体的指针,内存中就是结构体,本章来探寻Class的本质。 Class objectClass = [NSObject class]; Class objectMetaClass = object_getClass(

铭记_ 218

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

探寻OC对象的本质

iOS底层原理总结第一天 - 探寻OC对象的本质 对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索问题的本质内容。 面试题:一个NSObject对象占用多少内存? 探寻OC对象的本质,我们平时编写的Objective-C代码,底层实现其实都是C\C++代码。 OC代码的转化过程 OC的对象结构都是通过基础C\C++的结构体实现的。 我们通过创建OC文件及对象,并将OC文件转化为C++文件来探寻OC对象的本质 OC如下代码 #import <Fo..

铭记_ 349

探寻容器的本质

云原生的基础就是容器化。可以说正是容器技术的快速发展,才推动了云原生的时代浪潮。

weixin_34452850的博客 801

探寻人工智能的本质与学习之道

因此,学习人工智能不仅是为了掌握一门技术,更是为了适应未来社会的变革和发展,实现个人的职业发展和社会责任的担当。通过参与开源项目、参加编程竞赛、完成实际的人工智能应用开发,可以锻炼自己的解决问题和创新能力,提高实际操作的熟练度,培养解决实际问题的能力。通过扎实的数学和编程基础、追踪前沿技术、实践项目经验、多元化的知识学习和团队合作,可以帮助学习者更好地掌握人工智能的核心技术和方法,实现个人能力的不断提升和创新的推动。因此,人工智能的本质不仅仅是简单的模仿人类的智能行为,更是通过数据和算法的处理,

m0_70886513的博客 1159

探寻架构师的成长密码:修炼之路解析

每完成一个项目或解决一个技术难题后,及时进行复盘和总结是提升架构能力的重要方法。回顾项目中的架构设计过程,分析设计的优点和不足之处,思考如何改进。总结在项目中遇到的问题和解决方案,形成自己的知识库,以便在未来的项目中借鉴。例如,在项目上线后,发现系统在高并发情况下出现性能瓶颈。通过复盘,分析性能瓶颈产生的原因,是数据库查询效率低下还是系统架构设计不合理导致的。针对问题总结出相应的优化措施和预防方法,为今后的项目积累经验教训。架构修炼是一个长期而持续的过程,需要不断地学习、实践和总结。

wenlong5o02的博客 963

iOS底层原理总结 - 探寻Runtime本质(一)

isa的本质 在学习Runtime之前首先需要对isa的本质有一定的了解,这样之后学习Runtime会更便于理解。 回顾OC对象的本质,每个OC对象都含有一个isa指针,__arm64__之前,isa仅仅是一个指针,保存着对象或类对象内存地址,在__arm64__架构之后,apple对isa进行了优化,变成了一个共用体(union)结构,同时使用位域来存储更多的信息。 我们知道OC对象的is...

小丑鱼 241

iOS底层原理总结 - 探寻Class的本质

对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索问题的本质内容。 上接iOS底层原理总结 - 探寻OC对象的本质 Class的本质 我们知道不管是类对象还是元类对象,类型都是Class,class和mete-class的底层都是objc_class结构体的指针,内存中就是结构体,本章来探寻Class的本质。 Class objectClass = [NSObject...

小丑鱼 217

《软件架构设计》读书笔记

一、什么是架构? 从书中可以看到两个观点: 1. 架构=组件 +  交互 2.架构= 重要决策集 我更倾向于第一个观点,而用第二个观点提醒自己系统概要设计、详细设计等架构落地时候是否设计原则遵守了架构原则。 二、子系统、框架和架构 在解释这三个概念的时候,我想还要再加上要给概念:平台。好吧,分裂吧,程序员们。 子系统:这个概念最为简单,就是一个系统的细分,它具有系统的完整特性,要应用

许立峰的专栏 1489
上一篇: 相比微服务,模块化单体应用架构可能是更好的选择?
下一篇: 分层单体应用架构的本质
系统工程实验室
博客等级 码龄10年 258粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值