架构整洁之道摘录

这篇具有很好参考价值的文章主要介绍了架构整洁之道摘录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

软件架构

软件架构规则和其他变量完全⽆关。
软件设计的终极⽬标是⽤最⼩的成本来满⾜构建和维护系统的需求。
程序设计重要的是软件架构的灵活性⽽不是先实现功能。
软件系统的第⼀价值体系是系统⾏为,第⼆价值体系是系统架构

编程范式

结构化编程

利⽤if/else while等替代goto的使⽤,结构化编程对程序控制权的直接转移进⾏了限制和规范。

⾯向对象编程

利⽤多态限制⽤户对函数指针的使⽤,⾯向对象编程对程序控制权的间接转移进⾏了限制和规范。

函数式编程

函数式编程⼀般不可以修改变量的值,因此函数式编程对于变量的赋值进⾏了限制和规范。
⽤顺序结构、分⽀结构和循环结构就可以构造出任何程序。
架构设计时,对于功能的降解拆分仍然很重要。

⾯向对象编程

⾯向对象编程是⼀种对真实世界进⾏建模的⽅式。
封装性对于⾯向对象编程语⾔实际是削弱了。例如c++需要将变量定义在头⽂件中,java,c#由
于没头⽂件⽽分不清申明和定义。
完美的封装性存在于c语⾔中,struct定义在其他头⽂件,使⽤时前置申明好再使⽤。

继承性

继承特性在c语⾔中通过数据结构的内部变量的顺序控制以及强制类型转换实现。但是⾯向对象
的编程语⾔还是提供了更加易⽤的使⽤⽅式,⽐如多重继承的实现以及隐式的转换。

多态性

多态性使⽤c语⾔的函数指针也可以实现,但是对于易⽤和安全上,⾯向对象编程语⾔还是更加优秀。
⾯向对象编程通过多态实现依赖反转,这样可以完全控制系统中源码的依赖关系。使得架构师可以构建出插件式架构,每个组件实现独⽴部署。

不变性

函数式编程语⾔的变量是不可变的。这主要是为了避免造成多线程、死锁、并发等等的问题。

可变性隔离

将可变的组件和不可变的组件进⾏分离,不可变的组件使⽤纯函数的⽅式来执⾏任务,期间状态不可更改。不可变的组件将通过⼀个或者多个⾮函数式组件通信的⽅式来修改状态。
状态的修改⼀般使⽤事务型内存来保护可变变量,避免同步或者竞争状态的发⽣。
⼀个架构设计良好的应⽤程序应该将状态修改的部分和不需要修改的部分隔离或者独⽴成单独的组件,然后使⽤合适的机制来保护可变量。应该将逻辑尽可能的放在不可变组件中,可变组件中的逻辑越少越好。

SOLID原则

SRP:单⼀职责原则,每个软件模块有且只有⼀个被改变的理由
任何⼀个软件模块应该只对⼀类⾏为者负责
反⾯案例:⼀个⼯资管理程序的Employee类中包含三个函数calculatePay、reportHours、save,但这三个函数不属于⼀类calculatePay是财务部⻔制定、reportHours有HR使⽤、save由DBA制定。因此解决⽅法是将不同的⾏为者进⾏切分。

OCP原则

开闭原则,软件系统想要更加容易被改变的话,就需要允许增加代码来实现模块功能⽽⾮
修改现有的代码。⼀个好的计算机软件应该易于扩展,抗拒修改。模块单向依赖,限制每次修改的影响范围。实现⽅式是通过将系统划分为⼀系列的组件,将这些组件按照层次结构进⾏划分,使得低层次组建的修改不会影响⾼层次组件。

LSP原则

⾥⽒替换原则,软件最好遵守同⼀个约定,这样组件之间可以相互替换。
⼀个类依赖于另⼀个类的⽗类,这样⼦类不同,依赖的类不需要修改。
LSP原则不仅仅适⽤于继承类型,它适⽤于所有有统⼀的接⼝,并且期望可以相互替换的接⼝。

ISP原则

接⼝隔离原则,设计中避免不必要的依赖。类与类之间依赖只涉及必要的接⼝,⽆关的接⼝
不要依赖。

DIP

依赖反转原则,⾼层策略性的代码不应该依赖底层实现的代码,反之底层实现的代码应该依赖⾼层策略性的代码对于软件系统中经常变动的模块应该提供⼀个稳定的抽象接⼝。
代码中多使⽤抽象接⼝,尽量避免使⽤那些多变的具体实现类。不要在具体实现类派衍⽣类。不要覆盖包含具体实现的函数。应避免今年在代码中写任何与具体实现有关的名字,或者其他容易变动的名字。但具体实现调⽤的组件也不是不能出现,⼀般⼀个模块中会有⼀个调⽤具体实现的main组件。

组件

组建是指在软件部署时的最⼩单元。⽆论采⽤哪种部署形式,设计良好的组件应该保持可以单独部署的属性。

重定位技术

重定位技术出现是为了解决函数需要通过源代码的形加载使⽤的代码中,并且地址固定。
通过修改程序输出⼆进制⽂件的格式,由⼀个智能加载器加载到任意的内存。程序员需要指加载到的内存位置可重定位的代码中添加了⼀些记号,加载器在加载时会对这些制定的位置进⾏⼀些修改,⼀般是递增。这样的话,程序员可以⽤加载器来修改库函数加载的位置,并且还可以同时加载多个。

链接加载器

将库中的函数存储起来,⼀段程序调⽤了库中函数会被定义为外部引⽤,并将库中函数的名字称为外部定义,将两者链接起来。这样可以让程序员实现将程序分为多个可以被分别编译的代码段。
但是对于代码量较⼤的程序来说,这个过程⾮常缓慢,因此只能将加载和链接分离。链接过程放到链接器中进⾏。
现代程序由于内存和运算速度的⼤幅提⾼,链接过程已经⼤幅减少时间。
组件的形式在动态链接⽂件加载的应⽤场景中⾮常典型。⽬前插件式的架构已经被⼴泛使⽤。

组件聚合

REP 复⽤/发布等同原则

软件复⽤的最⼩粒度等同于发布的最⼩粒度。组建中的类与模块是密切相关的。

CCP 共同闭包原则

将可能同时修改以及有相同修改⽬的的类放在⼀个组件中。

CRP 共同复⽤原则

不要强迫⽤户⽤他们不需要的东⻄

⾯向服务架构

将系统拆分为⼀个个服务,服务之间进⾏隔离。服务需要⽀持单独编译和部署。

耦合的谬论

即使拆分为每个服务,但是进程之间的通信以及共享资源还是会将服务耦合在⼀起。所以如果想做到真正的耦合需要考虑如何避免这些问题。

独⽴部署的谬论

数据形式和⾏为形式的耦合,仍然会导致独⽴部署的困难。

横跨型变更

⽐如⼀个功能变更影响到许多的服务,这样也⽆法避免逻辑耦合的服务⼀起变更。
解决横跨型问题的⼀个⽅案是采⽤⾯向对象的组件式的模型,将逻辑放在基类中,特定的功能放在⼦类中。
服务边界不能代表系统的架构边界,服务内部的组件边界才是。

测试也是⼀种系统组件

可以将测试代码视为系统最外圈的程序。始终向内依赖,但其他组件不依赖它。
为了防⽌系统组件的修改引起⼤量的测试程序改变,需提⾼系统的可测试性,原则就是尽量少的依赖多变的东⻄。

整洁的嵌⼊式架构

软件不会随着时间推移⽽磨损,但是硬件会,因此硬件变更时软件可能也需要随之变更。因此需要通过好的架构设计来避免固件更迭带来的软件不适配问题,延⻓代码的有效使⽤⽣命周期。
嵌⼊式系统设计⼀般采⽤分层的⽅法。HAL是硬件抽象层,这⼀层将会给业务提供软件接⼝,因此会对硬件进⾏抽象。HAL的上层业务不需要知道底层硬件具体的实现细节,这样测试也可以通过HAL接⼝灌⼊值对软件接⼝进⾏测试。
硬件绑定很深的代码,例如硬件⼚商提供的读写寄存器、IO中断等的代码需要限制在固件层。和软件隔离之上层业务才能做到更好的移植性和可测试性。
软件和固件之间还需要操作系统层来防⽌上层代码和操作系统产⽣依赖。
整洁的嵌⼊式架构会引⼊操作系统抽象层,OSAL兼容以前的接⼝,并且可以让应采⽤定义好的公⽤结构。OSAL还可以为应⽤提供⽬标平台外的测试⽀撑点,是的测试也不依赖操作系统。

⾯向接⼝编程与可替代性

⾯向接⼝的交互式使得服务的可替代性提⾼。⽬前的普适规则是使⽤头⽂件充当接⼝的定义,但这样的话就需要保证头⽂件内容只包括函数声明以及函数使⽤到的结体和变量。数据库
数据库终究只是在硬盘与内存之间相互传输数据的⼀种⼿段⽽已,它真的可以被认为只是⼀个⻓期存储数据的、系统架构应该对磁盘本身的存在完全不关⼼。文章来源地址https://www.toymoban.com/news/detail-722958.html

到了这里,关于架构整洁之道摘录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 整洁架构在前端的设计思想与应用实践

    对于每个软件系统,我们都可以通过行为和架构两个维度来体现它的实际价值。 行为是指系统实现的功能特性,一般是比较紧急的,需要按时上线。架构就是指系统架构,是重要的,但是并不总是特别紧急。因此导致我们常常忽视系统的架构价值,使得系统越来越难于理解、

    2024年02月08日
    浏览(42)
  • Java开发中的分层开发和整洁架构

    maven多模块开发项目管理. 可以利用这种管理功能,实现一个项目的多层次模块开发–分层开发. 比如,当前项目HelloController依赖HelloService 这样做目的: 复杂开发过程.解耦(不调整依赖关系,无法解耦). 分层开发(横向拆分)和纵向拆分的区别在于,拆出多层,最终运行也是一个项目. 代

    2024年02月15日
    浏览(55)
  • 《AI时代架构师修炼之道:ChatGPT让架构师插上翅膀》

    本专注于帮助架构师在AI时代 实现晋级、提高效率的图书 书中介绍了如何使用 ChatGPT 来完成架构设计的各个环节 并通过实战案例展示了ChatGPT在实际架构设计中的应用方法 关键点 1.架构设计新模式:让架构设计更高效、更快捷、更完美。 2.全流程解析:涵盖架构设计的不同应

    2024年02月06日
    浏览(53)
  • AI时代架构师修炼之道:ChatGPT让架构师插上翅膀

    随着数字化时代的到来,软件架构师面临着越来越多的挑战,如快速响应需求变化、保证系统稳定性、优化性能等。为了应对这些挑战,提高工作效率是必不可少的。而ChatGPT作为一种强大的自然语言处理工具,可以为软件架构师提供许多帮助。本文将介绍如何使用ChatGPT提高

    2024年02月06日
    浏览(55)
  • 更安全、更低耗的微服务架构改造之道

    摘要: 微服务改造是政企客户云原生演进的重头戏,但如何做到成本低、安全性高、性能不变、方便调用等,却是一门学问。本文讲述华为云Stack的解决之道。 本文分享自华为云社区《【华为云Stack】【大架光临】第17期:更安全、更低耗的微服务架构改造之道》,作者:杨

    2023年04月14日
    浏览(43)
  • 【好书推荐】AI时代架构师修炼之道:ChatGPT让架构师插上翅膀

    目录 前言 ChatGPT对架构师工作的帮助 快速理解和分析需求 提供代码建议和解决方案 辅助系统设计和优化 提高团队协作效率 如何使用ChatGPT提高架构师工作效率 了解用户需求和分析问题 编码实践和问题解决 系统设计和优化建议 团队协作和沟通效率提升 知识管理和文档生成

    2024年02月06日
    浏览(51)
  • Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?

    你是否曾经想过,当你在 Intellij IDEA 中输入一个段代码时,GitHub 是如何给你返回相关的结果的?其实,这背后的秘密就是围绕 Prompt 生成而构建的架构设计。 Prompt 是 一个输入的文本段落或短语 ,用于引导 AI 生成模型执行特定的任务或生成特定类型的输出。不同的 Prompt 会导

    2024年02月08日
    浏览(49)
  • 云架构俭约之道七法则(The Frugal Architect)

    授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 在今年 2023 亚马逊云科技的 re:Invent 大会中 Amazon.com 副总裁兼首席技术官 Werner Vogels 博士在主题演讲中

    2024年02月03日
    浏览(34)
  • AI时代项目经理与架构师的成长之道:ChatGPT让你插上翅膀

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 在AI时代,项目经理和架构师的角色变得越发关键,他们需要不断学习和适应新技

    2024年02月04日
    浏览(50)
  • 「为什么代码要整洁?」——代码整洁度对于项目质量的影响,让我们通过这边文章来教你js和ts的代码整洁技巧,让你的项目更出众

    为什么代码要整洁? 代码质量与整洁度成正比。有的团队在赶工期的时候,不注重代码的整洁,代码写的越来越糟糕,项目越来越混乱,生产力也跟着下降,那就必须找更多人来提高生产力,开发成本越来越高。 整洁的代码是怎样的? 清晰表达意图、消除重复、简单抽象、

    2024年02月07日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包