DDD学习笔记 - 领域、子域和限界上下文

news/2024/7/16 8:18:26

在设计欠佳的软件里,子域和限界上下文(context)很难存在一对一的映射关系。-- 说明设计较好的,子域和限界上下文应该是一对一的映射关系。

在不同的模型中存在名字相同或者相近的对象,但是它们的意思缺不同。当模型被一个显示的边界所包围时,其中每个概念的含义便是确定的了。限界上下文主要是一个语义上的边界,我们应该通过这一点来衡量对一个限界上下文的使用正确与否。

不要尝试创建大而全的软件模型,其中每个概念在全局范围之内只有一种含义。项目都太庞大,太复杂,我们根本无法将所有的利益相关方聚集在一起,更别提达成一致。所以我们最好的方式是去正视这种不同,然后使用限界上下文对领域模型进行分离。

限界上下文并不旨在创建单一的项目资产,它并不是一个单独的组件、文档、或者框图。因此他并不是JAR或者DLL,但是这些可以用来部署限界上下文。

限界上下文主要用来封装通用语言和领域对象,也包含那些为领域模型提供交互手段和辅助功能的内容。

限界上下文的大小,可以包含多少领域模型中的基础部件:模块、聚合、领域事件、领域服务呢?原则是恰如其分,不多也不

少。

要创建一个恰到好处的限界上下文不是一件简单的事情。

可以把模型比喻成音乐,其中的音符(模块、聚合、事件和服务)的数量应该正好是设计所要求的那么多。

影响我们创建大小不正确的限界上下文的因数:1. 用架构来指导设计开发,而不是通用语言。这个时候我们通常会从技术层面而不是语义边界来思考问题。2. 根据开发任务的分配来拆分限界上下文。

创建限界上下文不能只是为了架构组件或者开发者资源考虑。

限界上下文可以与技术组件保持一致。将限界上下文想成技术组件并无大碍。但是我们要记住:技术组件并不能定义限界上下文。在我们使用IDE的时候通常一个限界上下文就是一个工程项目。

转载于:https://www.cnblogs.com/zzjimmy/p/10955168.html


http://www.niftyadmin.cn/n/3459249.html

相关文章

C++线程编程-设计无锁的并发数据结构

定义和结果 使用互斥元、条件变量以及future 来同步数据的算法和数据结构被称为阻塞的算法和数据结构.调用库函数的应用会中断一个线程的执行,直到另一个线程执行一个动作.这种库函数调用被称为阻塞调用,因为直到阻塞被释放时线程才能继续执行下去.通常…

你人再好有屁用?(火了)

你人再好,不是每个人都会喜欢你。有人羡慕你,也有人讨厌你,有人嫉妒你,也有人看不起你。生活就是这样,你所做的一切不能让每个人都满意,不要为了讨好别人而丢失自己的本性,因为每个人都有原则和…

python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】

前言:python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)。其实用awksort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下。 apache脚本: ips {} with open("/root/mail_ac…

sqlserver 查看表结构 字段 长度的2种方式

第1种:自己写SQL查询 selectc.name as tablename,a.name as [column],a.length ,a.isnullable,b.name as [type]FROM syscolumns a left join systypes b on a.xtypeb.xusertypeinner join sysobjects c on a.idc.id and c.xtypeUwhere c.name 表名 或 sele…

C/C++Unix网络编程-套接字编程简介

套接字地址结构 套接字的地址结构可以在两个方向上传播:从进程到内核和从内核到进程。 IPV4套接字地址结构 sin_len是长度字段,有的平台上的套接字没有这个东西,因为有外置的sizeof运算符。不是posxi标准强制的字段sin_family,sin_addr,sin…

Unix环境高级编程-进程间通信

进程间通信 同一台主机上的进程通信 – 不同主机上的通信 1、管道 内核提供,单工,自同步机制:管道永远是迁就慢的那一方 在使用管道的时候,一般一个进程的一个管道只使用read或者write, 最好把另一端关闭。 绝对不会一…

推荐日常生活用品

http://bbs.tianya.cn/post-funinfo-7680101-1.shtml 电动洗鼻器 水牙线 (飞利浦?) 智能猫眼: 类似于装在门口的监控,不用另外接线,而且原来防盗门上的猫眼只能起装饰作用,一拧就掉了,智能猫眼从外面是拧不掉的…

sqlserver check约束 从基础到高级应用 总结

1. 规定某 字段的数据必须是字母或者数字或者字母 alter table 表名 add constraint 约束名 check(字段 like %[0-9][a-z]%)上边是必须有字母和数字的,你可以加个:or 字段 like %[0-9]%or 字段 like %[a-z]% 2. 时间约束 EndTime不能早于BeginTime EndTi…