领域驱动设计理论学习笔记之领域模型

2007年Eric Evans发表《领域驱动设计》至今,领域驱动设计(DDD: Domain-Driven Design)的概念愈来愈被人了解与使用。我已经算是一个后知后觉者,但亡羊补牢,为时未晚。我们对领域这个词非常熟悉,而且经常放在嘴边,但又有多少重视它?开发人员更关注于技术,事实上我也是因为想要研究基于DDD的ASP.NET开发框架ABP(ASP.NET Boilerplate)。ABP是个开源框架,其分层框架,其代码逻辑有许多值得学习的地方,但如果要真正掌握它,我认为还是先从理论上理解,从思想上做些改变,所谓磨刀不误砍柴工就是这个道理。
      领域驱动设计(DDD: Domain-Driven Design)的核心在于领域模型,首先是要通过足够的沟通交流建立起一个领域模型,然后由领域模型驱动软件设计,用代码讲这些概念设计成一个领域模型。如何沟通交流?需要一种领域专家、软件设计人员、开发人员都能够理解的通用语言,曾经UML似乎就是希望作为一种建模语言,达成从分析到设计到编码的平滑过渡,但实际上UML在分析与设计上依然存在鸿沟,而且有很强的专业性。
      领域模型很重要和必要,那么领域模型有什么特点?
      领域模型是对某个领域的抽象,这个领域模型是有边界的,模型反应领域内我们关注的部分。这很好理解,任何一个系统的需求都有其边界,项目管理的范围管理也是在管理一个项目的边界,这会使得工作变得可控。
      领域模型并不是要尽可能符合“现实”的模型。即使对真实世界如何的建模,那也是一种模拟。建立领域模型是出于某种目的而概括的反应现实,类似于电影,用一种特殊的方法展现给观众,讲一个故事,阐述一个观点。
      领域模型只反映业务,与技术实现无关。比如人力资源领域、供应链领域与开发技术实现无关,但也有开发技术密切相关的领域,比如源代码管控系统,软件集成开发环境等。关于需求与设计的区别,一直有两种说法,直白的一种说法是:需求是关于要做什么,设计是关于要怎么做;另一种说法是:需求是关注业务领域,设计是关注技术实现。从这个角度看,领域模型是用于需求分析,或者确切的说是需求分析的工作产品。
领域模型是浓缩的知识,确保软件的业务逻辑在一个模型中,方便业务的理解。领域模型能够帮助开发人员平滑的将领域知识在转化为软件实现。事实上,开发人员绝大多数时候对业务领域并不熟悉,甚至可能完全不懂,这需要在开发前对开发人员做必要的业务培训。领域模型经过了提炼,可以更有效率的做到沟通。关键还在于围绕着领域模型,我们可以实现组件化,提高复用,也促使软件有更好的维护性。
      领域模型贯穿软件需求分析、设计、开发的整个过程,成为一个团队所有成员交流沟通的核心纽带,大家面对的是同一个模型。旧的观念认为需求人员开发需求规格,设计人员研究需求规格编写设计书,开发人员依据设计书编写代码。领域驱动设计显然不认可这种做法,开发人员不仅要能理解领域模型,还需要为领域模型的细化和完善做出贡献。这也意味着领域模型贯穿软件开发的整个生命周期,不断的更新。
      领域模型作为沟通的工具是可见的,需要表达出来。这种表达最常用的是图,也可是代码或文字描述。对这一点我是很好奇的,图很容易理解,比如用例图、流程图,代码怎么表达模型而让领域专家能够看懂?DDD建立一种名叫UBIQUITOUS LANGUAGE的领域通用语言或者说是模式。

时间: 2024-08-10 16:57:11

领域驱动设计理论学习笔记之领域模型的相关文章

领域驱动设计学习笔记(一 事件总线)

何为领域驱动设计? 2004年著名建模专家Eric Evans发表了他最具影响力的书籍:<Domain-Driven Design: Tackling Complexity in the Heart of Software>(中文译名:领域驱动设计:软件核心复杂性应对之道),书中提出了领域驱动设计(简称 DDD)的概念. 领域驱动设计事实上是针对OOAD的一个扩展和延伸,DDD基于面向对象分析与设计技术,对技术架构进行了分层规划,同时对每个类进行了策略和类型的划分. 领域模型是领域驱动的核心.

领域驱动设计学习笔记

最近学习了领域驱动设计,基本上熟悉了领域驱动的一些基本术语以及一些分析的方法,并结合了实际的开发架构.基本的概念是通过<领域驱动设计:软件核心复杂性应对之道>这本书来进行学习的,里面详细讲解了领域驱动的一些基本概念以及领域驱动的多个设计模式,如果想对领域驱动进行深入学习的话,这本书是一个不错的基础. 有了基本的概念之后,为了与实际的开发进行结合,我还阅读了<领域驱动设计C# 2008实现问题.设计.解决方案>.这本书作者通过实际的项目来展开讲解的,前面几章根据领域驱动的概念设计了领

实现领域驱动设计 读书笔记 1-3章

前言 大事拆分为小事,小事抓住重要事,重要事中做好基础事,基础事中坚持规矩办事.--于18年2月杭州滨江出差时发的一个朋友圈 最近换了一个项目在做,有用到ddd架构,从此结缘ddd,遂翻书以作深入理解 1.什么是DDD,为什么要是使用它? 2.领域 子域 和限界上下文 3.上下文映射图 原文地址:https://www.cnblogs.com/jdzhang/p/8684828.html

拨开迷雾,找回自我:DDD(领域驱动设计)应对具体业务场景,Domain Model(领域模型)到底如何设计?

写在前面 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领域模型的核心是实现业务逻辑,也就是说,在应对具体的业务场景的时候,实现业务逻辑是领域驱动设计最重要的一环,在写这篇博文之前,先总结下之前关于 DDD(领域驱动设计)的三篇博文: 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践:伪领域驱动设计,只是用 .NET 实现的一个“空壳”,仅此而已. 一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模

领域驱动设计的面向服务架构

[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这对于一些刚刚接触领域驱动设计的朋友可能会非常迷茫,从而觉得领域驱动设计很难,很复杂,因为学习中要消化一个整个案例的知识,这样未免很多人消化不了就打退堂鼓,就不继续研究下去了,所以这样也不利于DDD的推广.然而本系列

NET 领域驱动设计实战系列总结

NET 领域驱动设计实战系列总结 一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核心复杂性应对之道.实现领域驱动设计和Asp.net 设计模式等书,但是去年的学习仅仅限制于看书,当时看下来感觉,领域驱动设计并没有那么难,并且感觉有些领域驱动设计的内容并没有好的,反而觉得有点华而不实的感觉,所以去年也就放弃了领域驱动设计系列的分享了,但是到今年,在博客园看到还是有很多人写领域驱动的

我眼中的领域驱动设计

有幸参与了一些领域驱动的项目,读了一些文章,也见识了一些不伦不类的架构,感觉对领域驱动有了更进一步的认识.所以今天跟大伙探讨一下领域驱动设计,同时也对一些想要实践领域驱动设计却又无处下手,或者一些正在实践却又说不上领域驱动设计到底好在哪的朋友一些建议.当然对于领域驱动设计这个主题而言从来不乏争论,所以大家可以在畅所欲言. 为什么要使用领域驱动设计? 从Eric Evans写的<领域驱动设计:软件核心复杂性应对之道>一书的书名就可以看出这一方法论是为了解决软件核心复杂性的.也就是说软件业务越来越

我眼中的领域驱动设计(转)

原文地址:http://www.cnblogs.com/richieyang/p/5373250.html 有幸参与了一些领域驱动的项目,读了一些文章,也见识了一些不伦不类的架构,感觉对领域 驱动有了更进一步的认识.所以今天跟大伙探讨一下领域驱动设计,同时也对一些想要实践领域驱动设计却又无处下手,或者一些正在实践却又说不上领域驱动设计 到底好在哪的朋友一些指引方向.当然对于”领域驱动设计”这个主题而言从来不乏争论,所以大家可以在畅所欲言. 为什么要使用领域驱动设计? 从Eric Evans的<领

[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核心复杂性应对之道.实现领域驱动设计和Asp.net 设计模式等书,但是去年的学习仅仅限制于看书,当时看下来感觉,领域驱动设计并没有那么难,并且感觉有些领域驱动设计的内容并没有好的,反而觉得有点华而不实的感觉,所以去年也就放弃了领域驱动设计系列的分享了,但是到今年,在博客园看到还是有很多人写领域驱动的文章,以及介绍了领域驱动设计相关的