热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

一、领域、子域、限界上下文

一、简介领域驱动设计,Domain-Driver-Design,简称为DDD。DDD是一种思想,用以软件系统的分析和设计。由领域来驱动设计的进行,这里的领域可以简单理解为我们常说的“业务”。也

一、简介

领域驱动设计,Domain-Driver-Design,简称为DDD。

DDD是一种思想,用以软件系统的分析和设计。由领域来驱动设计的进行,这里的领域可以简单理解为我们常说的“业务”。也即是,由对业务的分析工作来驱动软件设计工作。

听起来好像所有软件都是这样,从业务分析到软件设计,但是一般软件过程中,业务和软件之间存在着一条鸿沟,分析完了,似乎没办法马上转换成软件设计。DDD思想则为了打破这道鸿沟。

DDD自上而下分为战略设计和战术设计,我们可以这么想,战略设计就是从上层进行抽象性设计,而战术设计就是基于上层抽象做下层的具体实现设计。

本文涉及的领域、子域、限界上下文就是属于战略设计。也就比较抽象,在DDD书籍当中看起来也显得有些晦涩。

不过对于思想层面的东西,我们不应该要求自己一下子就完全跟作者契合。而是通过自己的理解和不断实践,一步步让思想不断加深。所以,不要太纠结于自己是不是理解的不正确。

二、概念

什么是领域?

我们可以把领域当作一个大的问题域来理解,如果对一个企业来说,那么就是这个企业要做的所有事情。

什么是子域?

子域是相对于领域的一个概念,顾名思义就是领域被细化以后分成了不同的子域。这个应该相对比较好理解,因为我们人习惯性的会将大的东西进行分割,然后逐个击破。比如“分层思想”,“模块化思想”等。

那么子域就是将一个大的问题域拆分成了很多小的问题域。

并且根据子域的重要性以及作用范围将子域分成了:

1、核心域:重要性最强

2、支撑子域:重要性较低,辅助核心域

3、通用子域:给所有域提供辅助

什么是限界上下文?

开发软件的目的就是为了解决问题,领域定义了问题域,子域细分了问题域。那么我们需要考虑如何根据这些问题域来设计解决方案。

我们说的解决方案就是“领域模型”,领域驱动设计即根据问题域来进行建模。

可是我们想一下,如果我们对整个领域建立一个模型是不是太可怕了,如果系统过于庞大,那么这个模型也将非常庞大,牵一发动全身。

既然模型不好建得太庞大,那么我们可以根据细分的子域来建模型。

比较理想的情况是我们根据一个子域单独建立一个模型,也就是一个问题有一个解决方案。这是比较理想化,有时候我们会遇到一个模型能会对应多个子域,或者多个模型对应一个子域的情况。就是说我们可能需要多个解决方案一起来合作把一个问题解决,或者一个解决方案能够解决多个问题。

那,限界上下文在子域和模型这里起到什么作用呢?

我们姑且认为,限界上下文就是将模型对应的子域给框定一个范围,就是说我这个方案要解决的问题包括这些内容。从这个角度,我们可以将领域模型和限界上下文理解为一对一的关系,而通常一个限界上下文将成为一个系统。因此,我们简单地去认为(实际中这个等式并不准确):领域模型 = 限界上下文 = 一个系统 

事实上,限界上下文包含的不只是一个领域模型,还有通用语言,领域服务...等不少东西,这里不去讨论这些内容。

三、总结

本文不求甚解,将领域和子域映射为问题域的确定和细分,将领域模型作为问题域的解决方案,将限界上下文认为是为领域模型框定了一个范围表示领域模型解决了那些问题。

在进行战略设计的过程中,主要在于如何确定问题,以及确定要构建哪些模型来解决什么问题。

你根据问题域去设计解决方案的过程也即是领域如何驱动设计的过程。

 


推荐阅读
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • jQuery如何判断一个元素是否被点击?
    本文介绍了使用jQuery判断一个元素是否被点击的方法,并通过示例进行了具体说明。注意要指定父级,否则会执行多次。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
author-avatar
手机用户2402851155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有