Clean Architecture(整洁架构)

932 阅读3分钟

Clean Architecture(整洁架构) ‌ 是一种以‌业务逻辑为核心‌的软件架构设计模式,由 Robert C. Martin(Uncle Bob)提出。其核心目标是‌隔离业务逻辑与技术实现细节‌,构建一个‌高度可维护、可测试、可扩展‌的系统。它的设计灵感来源于六边形架构(Hexagonal Architecture)、洋葱架构(Onion Architecture)和分层架构思想。


核心特征与设计思想

  1. 分层依赖规则

    • 层级从内向外‌:业务核心在最内层,技术细节在最外层。
    • 依赖单向流动‌:外层可依赖内层,但内层绝不依赖外层(通过‌依赖倒置原则‌实现)。
    ⬅️ 依赖方向:
     框架层(数据库、UI、网络)  
        ↑  
     接口适配层(Presenter/Gateway)  
        ↑  
     用例层(应用逻辑)  
        ↑  
     实体层(核心业务模型与规则)
    
  2. 四大核心层级

    层级职责示例
    实体层 (Entities)封装企业级核心业务模型与规则,与技术框架无关UserOrder、验证逻辑
    用例层 (Use Cases)实现具体业务场景的逻辑流程(如“用户登录”“订单支付”)LoginUseCasePaymentUseCase
    接口适配层 (Adapters)转换外部系统(如API、数据库)与核心层的数据格式和协议REST控制器、数据库Repository、ViewModel
    框架层 (Frameworks)实现具体的UI、数据库、网络等技术细节Spring Boot、Retrofit、Room
  3. 核心原则

    • 独立性‌:实体层和用例层不依赖任何框架、UI或数据库代码(如不导入Android SDK或Spring包)。
    • 可替换性‌:外围技术组件(如数据库、UI框架)可随意更换,不影响核心逻辑。
    • 可测试性‌:核心业务逻辑可直接单元测试,无需启动应用或模拟外部依赖。

与MVC/MVVM的对比

架构模式核心问题Clean Architecture的优势
MVC业务逻辑易与UI层耦合,难以独立测试严格分离业务与技术层,UI变更不影响核心逻辑
MVVMViewModel可能包含技术细节依赖用例层纯业务逻辑,ViewModel仅负责数据适配与状态管理
分层架构层间依赖易混乱(如数据库代码渗透到业务层)依赖倒置原则强制隔离层级,依赖方向明确

实际应用示例

// 实体层:纯业务模型
data class User(val id: String, val name: String, val balance: Double)

// 用例层:业务逻辑(不依赖Android或Retrofit)
class TransferUseCase(private val repository: AccountRepository) {
    fun execute(from: User, to: User, amount: Double) {
        if (from.balance >= amount) {
            repository.updateBalance(from.id, from.balance - amount)
            repository.updateBalance(to.id, to.balance + amount)
        } else throw InsufficientBalanceException()
    }
}

// 适配层:数据转换(依赖用例层,但不含业务逻辑)
class AccountViewModel(private val transferUseCase: TransferUseCase) : ViewModel() {
    fun transfer(from: User, to: User, amount: Double) {
        try {
            transferUseCase.execute(from, to, amount)
            _uiState.value = Success
        } catch (e: InsufficientBalanceException) {
            _uiState.value = Error("余额不足")
        }
    }
}

为什么选择Clean Architecture?

  1. 长期价值‌:适合业务复杂且频繁变更的系统(如金融、电商),减少技术债务。
  2. 跨平台复用‌:核心业务代码可复用于Android、iOS、Web等多个平台。
  3. 团队协作‌:领域专家与技术专家可并行开发不同层级。

总结

Clean Architecture 通过‌分层解耦‌和‌依赖倒置‌,将系统划分为‌稳定核心‌(业务)与‌易变外围‌(技术实现)。它并非银弹,但能为中大型项目提供清晰的代码边界和可持续的演进能力。