一文读懂DDD

什么是DDD?

ddd不是一种架构风格,而是一种方法论,什么是方法论,每个人按照自己的想法来设计就是一套方法论;ddd是一种业务比较认可,对于微服务拆分的一种方法论。

为什么在微服务的大环境下DDD才流行?

微服务区别于系统,服务是一组想对较小且独立功能单元,是用户感知最小功能集。DDD计的模型中具有边界的最小原子是聚合,聚合和聚合之间由于只通过聚合根进行关联,所以当需要把一个聚合根从一个限界上下文移动到另外一个限界上下文的时候,非常低的移动成本可以很容易地对微服务进行重构。微服务和ddd的理念不谋而合,在微服务的大环境下ddd的流行是趋势。

为什么很多行业在微服务的架构上还是MVC架构?

  • 固化思维,从学校到工作,从学习到开源架构都是采取这种MVC架构;
  • 很多行业是基于传统行业进行项目改造,只是中间件用了微服务相关,但是业务没有明显的拆分依据,换汤不换药;
  • 资源成本,基于ddd的拆分成本比较高,主要体现在事件风暴、领域划分、实体聚合,上下文边界确定;对于企业来说,一个人能搞定的,不需要花大量的人力,时间去做规划;
  • 三层架构属于贫血模型,虽然不符合面向对象编程思想,架构结构比较简单,上手容易。

从技术上来讲DDD和MVC有什么区别?

MVC和DDD主要的区别在Service层,主要区别:

  • MVC:Service 实现全量业务逻辑,BO(Business Object)保存业务对象,属于贫血模型;
  • DDD:Service 实现少量业务逻辑,DO(Domain Object) 包含聚合跟、聚合、实体、值对象,从技术上来看就是实体,里面有相关领域的行为、动作、属性、依赖关系,属性充血模型。

DDD的基础概念

file

  • * 领域: 领域是DDD中最大的概念,主要确定边界范围,领域又分为核心域(核心业务逻辑)、通用域(公共业务逻辑)、支撑域(基础第三方业务逻辑);
  • 界限上下文:在界限上下文中要建立通用语言,望文生义,就是大家都看得到,认可的叫法就是通用语言;界限上下文主要是来确定领域边界;
  • 聚合根:聚合根式一个根实体,里面包含了许多聚合,而且该聚合根有唯一标识,可以协调里面的每个聚合,外部访问只能根据聚合根的唯一标识进行访问里面的私有内容;
  • 聚合:聚合是一个整体,把所有的实体和值对象组织起来,做到一个聚合的作用,确保领域在执行逻辑的时候,确定数据一致性,从设计上避免数据不一致性;
  • 实体:整体概念的多个属性归集到的属性集合,有唯一标识id,实体是实实在在的业务对象,具有业务属性、行为和业务逻辑;
  • 值对象:若干个属性的集合,只有数据初始化操作和有限的不涉及修改数据的行为,不包含业务逻辑

DDD建模过程

  • 采用风暴事件,根据句业务行为,找过过程中发生行为的实体和值对象;
  • 在众多实体中选出合适的作为聚合根,挑选依据主要是否有独立的生命周期和全局唯一的ID,是否可以修改或创建其它对象;
  • 根据业务单一职责和高内聚原则,找出于聚合根关联的实体和值对象;
  • 在聚合内根据聚合根、实体、值对象,画出对象引用模型和依赖关系模型;
  • 多个聚合根据业务语义和上下文划分到一个上下文界面,也就是一个小的微服务。

DDD建模示例

file

本文章参考:欧创新的DDD专栏file

本文由博客一文多发平台 OpenWrite 发布!

Transformer是一种基于注意力机制(Attention Mechanism)的深度学习模型架构,最初由Vaswani等人在论文《Attention is All You Need》中提出。它彻底改变了自然语言处理领域的传统做法,并成为许多先进模型的基础框架。 ### Transformer的核心思想 传统的序列建模方法如RNN、LSTM存在训练速度慢、难以并行化的问题。而Transformer通过自注意力机制(Self-Attention),能够在一次前向传播过程中捕捉到输入序列的所有位置之间的依赖关系,从而解决了这些问题。 #### 主要组成部分包括: 1. **编码器(Encoder)** 编码器负责将输入序列转换成高维表示向量。每个编码层包含两个子模块:一个多头注意力机制(Multi-head Attention)和一个全连接网络(Feed Forward Network)。这两个子模块之间采用残差连接和归一化操作。 2. **解码器(Decoder)** 解码器接收来自编码器的信息以及自身的先前输出预测结果,逐步生成目标序列。其结构类似于编码器,但也加入了“掩码多头注意力”以防止当前位置看到未来的标记信息。 3. **自注意力机制(Self-Attention / Multi-head Attention)** 自注意力允许模型关注句子中的不同部分,在计算某个词的上下文时表示时赋予其他单词不同程度的重要性权重值。这种机制使得长距离依赖更容易被捕获。 4. **Positional Encoding (位置嵌入)** 因为Transformer抛弃了递归形式的设计,默认无法感知输入数据的位置顺序关系,所以引入了固定模式的位置编码来增加时间维度上的特征表达能力。 --- ### 为什么Transformers很重要? - 它们极大地提高了机器翻译等任务的质量; - 提供了一个高效的学习框架可以扩展至非常大的规模; - 成为了预训练通用语言表征的重要工具,例如BERT、GPT系列皆以此为基础构建而成;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值