在与朋友交流中谈到DDD,说了一大堆理论概念思想以后,却对具体如何划分领域问住了,接下来就以如何划分领域来探讨如下。学习
按照实现领域驱动设计一书中描述的DDD步骤主要有4步:优化
目前对仓储概念的学习还不够深刻,也未用到实处,因此3和4暂时不深刻讨论,仅对划分领域第一步就说明了,先初步划分。设计
经典DDD分层:视频
我此次要作的就是划分领域层。对象
根据以前对领域的概念和上下文的了解,咱们首先要肯定整个项目的核心业务,以此为问题域,再逐步展开。因此咱们使用DDD的思想对案例进行剖析。blog
在进行以前,咱们须要一个demo案例,就拿一个博客来讲,以下图就是一个简单博客的领域划分。图片
一个博客简单来讲须要文章、用户、评论、分类。面向对象思想来分析业务时,到达这一步就基本结束了,接下来就是建库建表写代码了。可是DDD分析到这一步还未结束。开发
回顾书中所说:博客
一个领域本质上能够理解为就是一个问题域,只要是同一个领域,那问题域就相同。因此,只要咱们肯定了系统所属的领域,那这个系统的核心业务,即要解决的关键问题、问题的范围边界就基本肯定了。重构
这句话中的重点:
对于博客的核心问题是文章,在不考虑其余因素下,博客的核心功能就是展示文章给使用者看,既然如此核心域或者核心问题域就是展示文章,而如何展现(文字、图片、视频)、时效做用(建立时间)、所属分类(方便使用者搜索)等等都是为了知足核心问题域“展示文章”。
文章的来源为用户发布的,不然文章就是无根之源,即用户支撑文章。
评论的来源是用户,评论也是丰满整个文章的,但其内容又与文章属于两个部分,没有评论的存在依然能够有文章,因此评论为支撑子域。文章类型亦是如此。
因而,能够获得如下领域:
当咱们开发完成后,发现项目仅上线几天就被封禁,缘由是有用户上传了一些违禁内容,因而咱们从新分析需求、划分领域,又或者是当用户提出新需求,例如给用户推荐常常浏览文章的分类推荐文章给用户,因而从新划分领域,如此往复。
DDD的思想中,并不要求一次将全部领域划分完美,但必需要肯定核心域,根据业务需求,无论完善优化,这一点相似于敏捷开发,优先设计或者说完成核心功能,其余部分逐步完善。