领域驱动设计第一篇-DP主题

news2025/3/14 0:45:53

一:领域驱动设计概述

领域驱动设计。Domain-Driven Design 可以理解为基于领域的工程设计。

1:什么是领域?

初步理解领域:业务问题的范畴。

领域可大可小,对应着大小业务问题的边界。业务上要做的几个事,抽象拆分成多个内聚的领域 

2:通过一个样例感受DDD

(一):样例说明

地推员录入客户名称和手机号,根据手机号分配归属地和运营商,根据客户群体进行分组,分配给相应的销售组跟进后续业务。

需要提供一个注册服务。入参是:

客户和手机号  ==》查询运营商 ==》获取分组编号 ==》构建客户对象 ==》存入数据库

(二):找找问题

1:register接口语义有歧义、拓展性差,有歧义。

2:参数校验逻辑逻辑需要复用、内聚。不应该散落在每个参数方法内部。

3:参数校验异常和业务逻辑异常应该解耦。

        接口语义有歧义、拓展性差的原因就是因为接口的参数使用了基本类型参数,并且参数的个数是固定的。这个最好使用自定义的类型去代替。自定义类型应该包含属性+自校验逻辑。

业务逻辑的纯粹性。Register方法是一个注册服务,注册方法就是拿到客户信息 ==> 进行保存。所以、根据手机号归属编号和运行编号通过编号找到区域内的销售不应该属于这块内容。

知识补充:

什么叫胶水逻辑:胶水逻辑就是通过原有的业务参数,进行缝缝补补的操作,给后边的方法用,的操作就叫胶水逻辑。

如何改造胶水逻辑呢?要不直接给findRep方法自定义对象,如果是调用比人的接口,那么胶水操作可以内聚到PhoneNumber对象中,然后在findRep

如果一个业务方法内包含各种胶水操作,然后胶水操作又依赖其他的胶水操作,那么后续只能小心的屎山上雕花了。 

单元测试可行性。

通过上述的操作, 印象最深刻的应该就是DP(Domain Primitive)自定义对象了。传统的POJO中,类中只有属性和getset、但是DDD中的DP中不仅仅有属性,还有与属性相关的职责,这是典型的充血模型、前者是贫血模型。

(三):DP的定义

在DDD中,DP可以是说是一切模型、方法、架构的基础。他是在特定领域、拥有精准定义、可以自我验证、拥有行为的对象。可以认为是领域的最小组成部分。

(四):DP的三原则

让隐形的概念显性化

归属地编号、运营商编号属于电话号码的隐藏属性。使用String属性定义电话号码,这些属性很难展示出来,基于DP可以让隐形的上下文显性化。

让隐形的上下文显性化


封装多对象行为。

封装多对象行为就是一个DP里边可以放其他的DP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMNLP'24 最佳论文解读 | 大语言模型的预训练数据检测:基于散度的校准方法

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 张伟超,中国科学院计算所网络数据科学与技术重点实验室三年级直博生 内容简介 近年来,大语言模型(LLMs)的…

IntelliJ IDEA 远程调试

IntelliJ IDEA 远程调试 在平时开发 JAVA 程序时,在遇到比较棘手的 Bug 或者是线上线下结果不一致的情况下,我们会通过打 Log 或者 Debug 的方式去定位并解决问题,两种方式各有利弊,今天就简要介绍下如何通过远程 Debug 的情况下…

【Webug】攻防实战详情

世界上只有一种真正的英雄主义,那就是认清了生活的真相后,仍然热爱她 显错注入 首先整体浏览网站 注入点: control/sqlinject/manifest_error.php?id1 判断注入类型 输入: and 11 正常, 再输入: and 12 还正常, 排除数字型 输入单引号:…

SpringMVC核心、两种视图解析方法、过滤器拦截器 “ / “ 的意义

SpringMVC的执行流程 1. Spring MVC 的视图解析机制 Spring MVC 的核心职责之一是将数据绑定到视图并呈现给用户。它通过 视图解析器(View Resolver) 来将逻辑视图名称解析为具体的视图文件(如 HTML、JSP)。 核心流程 Controlle…

CyclicBarrier线程辅助类的简单使用

文章目录 简述内部机制构造函数使用案例异常处理 简述 CyclicBarrier 是另一个用于协调多个线程之间操作的同步辅助类,它允许一组线程互相等待彼此到达一个共同的屏障点(barrier)。与 CountDownLatch 不同的是,CyclicBarrier 可以…

B站推荐模型数据流的一致性架构

01 背景 推荐系统的模型,通过学习用户历史行为来达到个性化精准推荐的目的,因此模型训练依赖的样本数据,需要包括用户特征、服务端推荐的视频特征,以及用户在推荐视频上是否有一系列的消费行为。 推荐模型数据流,即为…

无需训练!多提示视频生成最新SOTA!港中文腾讯等发布DiTCtrl:基于MM-DiT架构

文章链接:https://arxiv.org/pdf/2412.18597 项目链接:https://github.com/TencentARC/DiTCtrl 亮点直击 DiTCtrl,这是一种基于MM-DiT架构的、首次无需调优的多提示视频生成方法。本文的方法结合了新颖的KV共享机制和隐混合策略,使…

尔湾市圣诞节文化交流会成功举办,展示多元文化魅力

洛杉矶——12月21日,圣诞节文化交流会在尔湾成功举办。圣诞节文化交流会旨在促进不同文化之间的交流与理解。通过举办舞蹈表演、演讲和互动游戏等,为参与者提供了一个展示和欣赏多元文化艺术的平台。这些活动不仅增加了社区成员之间的互动,也加深了他们对不同文化传统和艺术形式…

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成 现代项目经理的核心职责是提供可视性、保持团队一致,并确保团队拥有交付出色工作所需的资源。在过去几年中,由于分布式团队的需求不断增加,项目经理这一角色已迅速…

Spring Cloud LoadBalancer (负载均衡)

目录 什么是负载均衡 服务端负载均衡 客户端负载均衡 Spring Cloud LoadBalancer快速上手 启动多个product-service实例 测试负载均衡 负载均衡策略 自定义负载均衡策略 什么是负载均衡 负载均衡(Load Balance,简称 LB) , 是高并发, 高可用系统必不可少的关…

探究步进电机与输入脉冲的关系

深入了解步进电机 前言一、 步进电机原理二、 细分三、脉冲数总结 前言 主要是探究以下内容: 1、步进电机的步进角。 2、什么是细分。 3、脉冲的计算。 最后再扩展以下STM32定时器的计算方法。 一、 步进电机原理 其实语言描述怎么样都不直观,我更建议…

HCIA-Access V2.5_7_1_XG(S)原理_系统概述

近年来,随着全球范围内接入市场的飞快发展以及全业务运营的快速开展,已有的PON技术标准在带宽需求,业务支撑能力以及接入节点设备和配套设备的性能提升等方面都面临新的升级需求,而GPON已经向10G GPON演示,本章将介绍1…

安装了python,环境变量也设置了,但是输入python不报错也没反应是为什么?window的锅!

目录 问题 结论总结 衍生问题 1 第1步:小白python安装,不要埋头一直点下一步!!! 2 第2步:可以选择删了之前的,重新安装python 3 第3步:如果你不想或不能删了重装python&#…

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

docker redis安装

一.镜像拉取 docker pull redis:5.0新建文件 touch /home/redis/redis.conf touch /home/redis/redis_6379.pid # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepali…

计算机网络 (13)信道复用技术

前言 计算机网络中的信道复用技术是一种提高网络资源利用率的关键技术。它允许在一条物理信道上同时传输多个用户的信号,从而提高了信道的传输效率和带宽利用率。 一、信道复用技术的定义 信道复用(Multiplexing)就是在一条传输媒体上同时传输…

2236. 判断根结点是否等于子结点之和

给你一个 二叉树 的根结点 root,该二叉树由恰好 3 个结点组成:根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和,返回 true ,否则返回 false 。 示例 1: 输入:root [10,4,6] 输出&#xf…

orm03

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口,可供开发过程中调用和测试使用 django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

UE5材质节点Panner

Panner节点可以让贴图动起来,快捷键是P,Speed的数值大小就是贴图移动的快慢,x和y是方向 这个节点可以用来做,传送带,护盾,河流,岩浆,瀑布等 制作岩浆流动效果 创建材质,…

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo 前言摘要引言Task 相关工作方法SDM-UniPS预处理尺度不变的空间光特征编码器像素采样变压器的非局部交互 PS-Mix数据集 实验结果训练细节评估和时间: 消融实验定向照明下的评估没有对…