普通视图
ByAI-Swift 6 全览:一份面向实战开发者的新特性速查手册
Swift 中 let 与 var 的真正区别:不仅关乎“可变”与否
swiftUI视图修改器(ViewModifier)解析
git hooks配置
Flutter 复用艺术:Mixin 与 Abstract 的架构哲学与线性化解密
零一开源|前沿技术周刊 #12
前沿技术周刊 是一份专注于技术生态的周刊,每周更新。本周刊深入挖掘高质量技术内容,为开发者提供持续的知识更新与技术洞察。
大厂在做什么
码圈新闻
深度技术
新技术介绍
博客推荐
- Android: 适配 16KB 页面大小:提升应用性能并为用户提供更流畅的应用体验
- Android: 深入浅出Android的Context机制
- HarmonyOS: 鸿蒙ArkWeb加载优化方案详解
GitHub 一周推荐
- 其他: Qwen-Image
关于我们
【零一开源】 是一个 文章 和 开源项目 的分享站,有写博客或开源项目的也欢迎来提供投递。 每周会搜集、整理当前的新技术、新文章,欢迎大家订阅。
「内力探查术」:用 Instruments 勘破 SwiftUI 卡顿迷局
Swift Concurrency:彻底告别“线程思维”,拥抱 Task 的世界
深入理解 Swift 中的 async/await:告别回调地狱,拥抱结构化并发
深入理解 SwiftUI 的 ViewBuilder:从隐式语法到自定义容器
在 async/throwing 场景下优雅地使用 Swift 的 defer 关键字
我差点失去了巴顿(我的狗狗) | 肘子的 Swift 周报 #098
当Swift Codable遇到缺失字段:优雅解决数据解码难题
RunLoop 实现原理
用 SwiftUI 打造一个 iOS「设置」界面
三年期已满,你的产品不再更新将于90天后下架。
架构整洁之道 —— Clean Architecture
架构是个让大家又爱又恨的话题,谁都可以说上两句,但又不一定所有人能把它说清楚。不过归根结底,你见得多了,想得多了,实践得多了,思考得多了之后,都可以最终达到领悟的状态。本文接下来就给大家提供一些基于Clean Architecture这本书的洞见。
首先,对一个软件项目的整体架构进行治理的首要目的是代码可读性,可复用性,可测性,可维护性,所以如果你的项目本身规模不大,比如一个只有一个功能的demo项目,使用简单的MVC架构,分目录归拢代码就能清晰在划分出对应职责,那这种时候你不需要花额外精力来治理架构
那么对于一个大型的且需要持续迭代的项目来说,架构治理会是一个必然的要求,因为随着代码量的增加,项目复杂度和改动成本的不断增加,以及随之而来的功能稳定性问题会是项目能否持续向前演进的关键。
今天我们主要说一下Clean Architecture这个技术流派是以什么出发点,用什么方法来解决架构问题。
软件架构面临哪些问题
- 代码复杂度
- 人员变动
- 重构
- 替换模块
所有这些都指向一个要求,能够让开发者不借助外力的情况下知道改哪些代码,怎么改
怎么解决呢
这本书系统地介绍了架构的相关知识,基于整洁架构的洋葱模型对工程代码进行分层从而实现关注点分离。降低项目维护成本,实现项目的“快稳狠”。
其它架构是怎么解决的
六边形架构(Hexagonal Architecture)
又称为端口与适配器(Ports and Adapters),由 Alistair Cockburn 提出,并在 Steve Freeman 与 Nat Pryce 的经典著作 Growing Object-Oriented Software 中得以推广。
洋葱架构(Onion Architecture)
由 Jeffrey Palermo 提出。
尖叫架构(Screaming Architecture)
出自作者Uncle Bos 2011年的一篇博客。
DCI 架构(Data-Context-Interaction)
由 James Coplien 与 Trygve Reenskaug 提出。
BCE(Boundary-Control-Entity)
由 Ivar Jacobson 在其著作 Object-Oriented Software Engineering: A Use-Case Driven Approach 中提出。
虽然这些架构在细节上有所不同,但它们非常相似。它们的共同目标是 关注点分离(Separation of Concerns) 。也就是都通过将软件划分为不同层次来实现这种分离。每种架构至少都有一个用于 业务规则(business rules) 的层,以及另一个用于 接口(interfaces) 的层。
这些架构产生的系统具备以下特性:
-
与框架无关
架构不依赖某些功能繁多的软件库的存在。这样你可以把框架当作工具来用,而不是被迫把系统塞进它们的局限里。 -
可测试
业务规则可以在没有 UI、数据库、Web 服务器或其他外部元素的情况下进行测试。 -
与 UI 无关
UI 可以轻松更换,而无需修改系统的其他部分。例如,可以将 Web UI 替换为命令行 UI,而无需改动业务规则。 -
与数据库无关
可以将 Oracle 或 SQL Server 替换为 Mongo、BigTable、CouchDB 等,而业务规则不会受到影响。 -
与任何外部机构无关
业务规则对外部世界一无所知。
下面将讲到的整洁架构的图示,正是试图将这些架构整合成一个可执行的统一理念。
整洁架构怎么解决呢
用书里面的话来说判断一个软件架构的优劣,可以用它满足用户需求所需要的成本来衡量。如果该成本很低,并且在系统的整个生命周期内一直都能维持这样的低成本,那么这个系统的设计就是优良的。如果该系统的每次发布都会提升下一次变更的成本,那么这个设计就是不好的
最重要的原则是依赖原则,依赖只能向内。也就是内层不应知道任何外层的细节,包括但不限于函数、类、变量、数据格式或任何其它实体。