你的位置:首页 > ASP.net教程

[ASP.net教程]学习领域驱动设计开篇


1.学习背景

    最近在翻阅博客园的文章的时候,不断的有这么几个字冲击我的眼球"领域驱动模型","DDD"等相关字眼。对此产生浓厚的兴趣,想要深入了解下,这些高大上的名词背后究竟有什么东西让人如何着魔!学习书籍《实现领域驱动设计》,开篇先对领域驱动设计的一些基本词汇进行解释下,就如同武侠小说一般,先对主角的武功进行一些简介。让我们一起探索领域驱动的世界!

 

2.什么是领域驱动设计

  2.1.定义

    领域驱动设计(Domian Driven Design,简称:DDD)是一种软件开发方法,请注意它的修饰词,仅仅是一种方法。它可以帮助我们设计高质量(可测试的、可伸缩的、组织良好)的软件模型。

  2.2.误区

    DDD首先并不是关于技术的,而是关于讨论、聆听、理解、发现和业务价值的。DDD是关于某个特定业务领域的软件模型,通常是通过对象模型来实现。这些对象同时包含了数据和行为,并且表达了准确的业务含义。

3.为什么要学习领域驱动设计

  • 使领域专家和开发者在一起工作
  • 准确的传达业务规则
  • 可以帮助业务人员自我提升
  • 对于知识的集中
  • 领域专家、开发者及软件本身之间不存在"翻译"
  • 设计就是代码,代码就是设计
  • DDD同时提供了战略设计和战术设计两种方式。战略设计帮助我们理解哪些投入最重要等等,战术设计则帮助我们创建DDD模型中的各个部件

4.领域、子域和限界上下文

  4.1.领域

    从广义上讲,领域即是一个组织所做的事情以及其中所包含的一切,每个组织都有它自己的业务范围和做事方式,这个业务范围以及在其中所进行的活动便是领域。当你为某个组织开发软件时,你面对便是这个组织的领域。

  4.2.子域

    在DDD中,一个领域被分割为若干的子域,领域模型在限界上下文中完成开发

  4.3.限界上下文

限界上下文是一个显式的边界,领域模型便存在这个边界之内。然而限界上下文并不旨在创建单一的项目资产,它并不是单独的组件、文档、或者框图。举个例子来形象的说明下限界上下文的含义。例如一个账户模型在银行上下文(Banking Context)和博客园上下文(Cnblog Context),其中在银行上下文中,账户表示的是客户在银行中的收入及支出的信息。而博客园上下文,是文章作者记录自己的工作心得或学习心得的记录。这样得出一个事实:上下文才是王道!

这样的好处就是我们安全没有必要在制定命名的时候刻意与其他的上下文不同。如同上面的例子我们没有必要命名成:BankAccount、CnblogAccout来进行区别。

   4.3.1协作上下文

    业务协作工具对于创建一个协作式工作环境来说非常重要,有助于增加工作效率,促进观点共享。

而在进行任务的分割的时候需要把模型的职责划分清楚,例如具体示例中身份验证模块不能放入商品模块中,会员注册的逻辑也不能放在核心模块。尽量在对业务逻辑分析清楚的时候把对应模块的职责也划分清楚。

   4.3.2敏捷项目管理上下文

    在具体示例中,商品模块属于敏捷项目管理上下文,因为在经营的过程中,有可能会对商品进行促销及相对应的优惠或者不同会员VIP的折扣等等。所以,商品模块需要使用Scrum作为迭代和增量式的项目管理。这样就能保证对待定项的评估来对业务价值的分析来确定

5.小结

    这篇文章只是简单的对领域驱动设计有个简单性的理性认识,知道这是什么,里面大概有什么内容,至于领域驱动的设计里面核心的部分例如:上下文映射图、架构、实体、值对象、领域服务、领域事件、模块、聚合等等一些概念,我会继续在接下的时间内去学习并写成博客,形成一个系列。时间不早了,各位早点睡觉吧。