截至目前,我已在公众号上发布了多个系列文章,涵盖了SpringBoot老鸟系列、SpringCloud微服务系列、运维监控系列、分库分表系列和Kubernetes云原生系列。尽管每个系列的重点各有不同,它们都关注微服务架构的各个方面和技术要点。然而,随着时间的推移和技术版本的更新,一些曾推荐的技术组件和观点已经不再适用。 例如,Swagger接口管理工具已久未更新,Spring Security OAuth已被废弃,参数分组校验导致了代码混乱,推荐的实体转换组件也不一定是佳选择。
因此,我一直在思考如何整合这些系列文章的核心内容,创建一个新系列,同时与新技术发展趋势和实践经验相结合。经过与群友讨论,我决定启动名为 “DDD微服务商城实战” 的新专栏,通过领域驱动设计DDD整合前述系列文章的知识点。
何为DDD
随着微服务架构的普及和广泛应用,领域驱动设计(Domain-Driven Design,简称DDD)逐渐成为业界的热门话题。作为一种建模方式,DDD旨在深入挖掘业务领域的核心需求和概念,将其转化为可执行的代码模型,实现灵活、稳定的系统架构。然而,对于初学者来说,DDD中充满了晦涩难懂的概念,令人不知从何入手。
在我看来,学习DDD就像是学习游泳一样。你可以通过观看教学视频、阅读书籍来掌握游泳的原理,但若不实际跳入水中练习,你将永远无法真正掌握游泳的技巧和窍门。
因此,我们需要通过实际操作来深入理解DDD的设计原则和实践方法。只有在实践过程中不断摸爬滚打,才能够真正掌握DDD的精髓。
首先,让我们站在全局的角度来了解一下DDD。
要掌握DDD,关键是要把握两个设计过程:战略设计 和 战*术设计。
战略设计主要从业务角度出发,划分业务的领域边界,建立基于通用语言和业务上下文语义边界的限界上下文,实现业务领域模型的构建。
限界上下文可以作为微服务拆分和设计的边界,领域建模可以作为战*术设计的输入。
战*术设计是从技术视角出发,侧重于对领域模型的技术实现。它主要涉及到微服务的设计和实现,以及领域模型和代码的映射关系。
战略设计和战*术设计两者协同完成领域建模以及微服务设计和实现。
接下来看看领域模型、微服务和DDD之间的关系
领域模型是抽象且标准化的可复用模型,其设计遵循单一职责原则。微服务则是领域模型的技术实现。DDD是一种指导领域建模和微服务设计的方法论,遵循高内聚低耦合原则,完成业务端领域拆分、建模到应用端微服务实现的无缝落地。
结语
在本专栏中,我会从零开始构建一个完整的SpringCloud微服务商城系统,并详细讲解如何进行系统设计,一起探讨DDD的设计原则和实践方法,并分享实际项目中的经验教训和一些佳实践。
本专栏使用的技术栈均为当前主流新版本,如JDK 17和Spring Boot 3.0。鉴于个人能力所限,文章中难免会出现错误,因此非常欢迎读者提出宝贵的意见和建议,帮助我不断改进本专栏,同时也希望你能一起参与进来。