星球的眼睛 发表于 2024-8-17 02:35:53

论阿里DDD开源Cola框架之依靠颠倒

配景描述

       领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,它强调将业务知识集成到领域模子中,并将技术实现细节分离到底子办法代码中。这种方法论的焦点理念与《代码的简便之道》(Clean Code)中的观点相呼应,即在软件设计中应该将业务逻辑层(高层)与技术实现层(底层)分离。通过这种分离,可以确保业务逻辑层不依靠于技术实现层,从而使得业务逻辑的扩展和维护不受技术实现的限定,有用降低业务和技术复杂性的耦合。
       然而,在分析阿里巴巴的COLA(Clean Object-Oriented and Layered Architecture)架构时,我们发现其设计者在业务逻辑层和技术实现层的依靠关系上存在肯定的误解。这种误解大概会误导开发者,影响他们对DDD理念的正确理解和应用。本文的目的在于澄清这些概念,帮助开发者更深入地理解DDD和COLA架构,从而在实际开发中做出更合理的架构决策。
题目阐明

https://i-blog.csdnimg.cn/direct/9816abf6851e4f9c8089ff9ace2253c9.png
       在探讨领域驱动设计(DDD)和COLA(Clean Object-Oriented and Layered Architecture)架构时,我们可以通过分析两种架构的图示来理解它们在设计上的差异和潜伏题目。
       左侧图:展示的是COLA架构的阐明图,该图可以在COLA的GitHub堆栈中找到(https://github.com/alibaba/COLA)。这张图描述了COLA架构的各个构成部分及其相互关系。
       右侧图:是根据DDD原则,特殊是《领域驱动设计:软件焦点复杂性应对之道》一书中提出的分层架构理念,重新设计的架构图。这张图展示了怎样将DDD的原则应用到COLA架构中。
       对比分析
       1. 依靠关系:
       在COLA架构中,Infrastructure(底子办法层)直接依靠于App层(领域服务层)。这种设计使得技术实现层(底子办法层)与业务逻辑层(领域服务层)紧密耦合,违反了DDD中提倡的条理解耦原则。
       右侧的架构图中,底子办法层通过实现领域服务层界说的接口来提供服务。这种设计允许底子办法层独立于领域服务层,从而降低了它们之间的耦合度。
       2. 扩展性题目:
       在COLA架构中,由于底子办法层依靠于领域服务层,当必要更换数据库系统(如从MySQL迁移到ES、MongoDB、Neo4J或Redis)时,这种依靠关系会导致领域服务层也必要相应的修改,从而增加了系统的复杂性和维护成本。
       右侧的架构图通过接口实现的方式,使得底子办法层的变更不会影响到领域服务层。这样,当必要替换底子办法时,只必要提供新的实现即可,而不必要修改领域服务层的代码,大大提高了系统的扩展性和灵活性。
       3. 设计原则:
       COLA架构的设计大概没有充实思量到DDD中强调的条理解耦和业务逻辑的独立性。这种设计大概会导致系统在面对技术变更时变得脆弱。
       右侧的架构图则更符合DDD的原则,通过接口隔离不同条理的实现,使得系统更加灵活和可维护。
从洋葱头架构角度看题目

       在讨论软件架构设计时,洋葱头架构(Onion Architecture)提供了一种直观的方式来理解不同条理之间的关系和依靠。对于该题目,从洋葱头架构视角看更直观,如下图所示:
https://i-blog.csdnimg.cn/direct/29ecec028821415f9ba8082c2ed59df0.png
       左侧COLA的架构把底子办法层放在了领域服务层和领域层之间,右侧正确的架构是底子办法层作为可插拔的组件依靠于领域服务层,为领域服务层提供技术实现的扩展本领。
结论

       通过对比分析,我们可以看到,虽然COLA架构在某些方面提供了清楚的分层,但在依靠关系和扩展性方面存在肯定的题目。通过遵循DDD的原则,我们可以设计出更加灵活和可维护的系统架构。这种设计不仅有助于降低系统的复杂性,还能够提高系统的可扩展性和适应性,从而更好地应对不停变化的业务需求和技术需求。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 论阿里DDD开源Cola框架之依靠颠倒