DDD-领域驱动设计

本文最后更新于:7 个月前

以现实中的事物、行为和关系为基础构建领域驱动模型(分别对应对象、方法和关联),强调以业务领域为中心进行软件开发。DDD 旨在创建软件模型,这些模型与业务专家所理解的业务概念紧密相连,确保软件设计能够反映业务需求。

需求变更设计

需求变更时判断变更需求和原来领域对象的关系的判断方法?

  1. 遵循单一职责原则(即只做自己分内之事,其他的事别人来做,自己只调用)
  2. 判断新需求和原领域对象是否存在变换一致的关系(即一个变更时另外一个是不是一定跟着变).
  3. 如果两者变换一致则内聚在一个模块,否则分为不同领域对象抽象共性接口采用合适的设计模式实现需求变更。

领域模型设计-数据库设计

  1. 领域模型中,不论对象还是属性,在命名时都采用中文
  2. 数据库设计时,要细化为英文命名,或者汉语拼音首字母,同时要确定字段类型与是否为空等其它属性
  3. 采用四种关系:一对一关系、一对多关系、多对一关系、多对多关系和继承关系(领域模型设计特有)

继承关系

继承关系时领域模型设计中特有的关系,在转化为数据库设计时有三种方案。

方案一

|475|in1

子对象数量少、属性少时可以采用父子共用一个表,包含父子所有属性对应的字段(父子主键一致),但是存在表稀疏问题,导致大量字段为空,使得存储空间浪费。

优点:简单,整个继承关系的数据全部保存在这个表里
缺点:造成“表稀疏”

方案二

|400

|400

每个子类对应一个表,每个表包含父类属性和子类特有属性(所有子类主键一致,以标识属于一个父类),适用于单次仅查询某一个子对象,不适合单词查询父类的所有子类对象。

方案三

|525

为父类和子类各自都有一张表,子类只包含其特有属性(父子主键一致),当查询父类的所有子类时根据主键查询父类共性信息再查询所有子类表获取特有信息。

|350

NoSQL数据库设计中一般采用第一种方案,因为NoSQL数据库把所有join操作的多表信息以集合(数组或对象)的形式全部集成在一个表中。


DDD-领域驱动设计
https://alleyf.github.io/2024/04/40f64f9b6cf6.html
作者
fcs
发布于
2024年4月18日
更新于
2024年4月19日
许可协议