领域驱动设计DDD学习(一)

124 阅读2分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战image.png

web端的痛点

作为一个只会crud的码农,一直以来都是用服务端开发的经典三层架构去开发项目,如Controller、Service、Repository。对于简单的需求来说可能这样子没什么问题。但是作为一个产品,是需要维护的,后期新加上的功能,会渐渐将我们原先的代码腐化,新需求和老需求的代码混在一起变得难以管理。Service层承担了比较重的职责,如果没有加以控制,Servcie层会迅速膨胀成为一个上帝对象,事无巨细都由它来管理,作为功能的开发者都会感觉到头大。领域驱动设计就是用来解决这类问题的。

什么是领域驱动设计

领域驱动设计,是Eric Evans在《Domain-Driven Design Tackling Complexity in the Heart ofSoftware》提出的一套针对业务领域建模的方法论。相比以前我们直接将所有的代码写在Service层的做法,DDD要求我们能对功能做出正确的建模,具体的业务由具体的业务对象去处理,而不是全部由Service来进行承担,将业务复杂度进行分摊,各个抽象出来的领域专注负责自己的业务功能,Service则转而变成领域对象的协调者,成为轻量级的一个层面。这样,我们的功能模块就更加内聚,功能边界清晰,方便我们的管理。

怎么实现DDD

事实上,我对DDD的理解就是面向对象编程就是DDD的思想实现,对象与对象之间的职责明确,通过对对象的职责进行划分,我们就可以划清对象的边界,也就是业务的边界。对象再也不是只有get、set方法的贫血模型,他们应该有自己的行为,是一个有血有肉的实体,像大多数开源框架,都是这个思想。当然,DDD有它一些特殊概念,我们将在后面进行讲解。