DDD第一话:业务领域分析

业务领域的概念

业务领域定义了公司的主要活动领域,这是公司为客户提供的服务内容。例如:联邦快递提供快递服务;星巴克最出名的是它的咖啡。

子域

为了实现其业务领域的目标和目标,公司必须在多个子领域中操作。子域是业务活动的细粒度集合。DDD中将子域分为三个类型:

  • 核心子域:这是最复杂的,也是一家公司最核心的竞争能力。竞争对手应该很难复制或模仿该公司的解决方案。需要注意的是,核心子域不一定是技术性的,它应该是竞争优势的来源。核心子域不可能是“核心域”,子域可以随着时间的推移而演变,改变它们的类型。如。核心子域可以转换为通用子域。
  • 通用子域:所有公司都以同样的方式进行的业务活动。通用子域名不会为公司提供任何竞争优势。不需要创新和优化。
  • 支撑子域:顾名思义,支持子域支持公司的业务。然而,与核心子域相反,支持子域不提供任何竞争优势。

子域类比

我们从每个角度上看看,探索它们之间存在的差异,看看它们是如何影响战略性软件设计决策的。

公司竞争优势

只有核心子域才能为公司提供竞争优势。核心子域名是公司区别于竞争对手的策略。通用子域可能具有公司及其竞争对手使用的相同解决方案。支持子域的进入门槛较低,不能提供竞争优势。

复杂度

核心子域的复杂性往往最高,他为公司提供更高竞争力的同时,其他公司也难以模仿。通用域使用的是市场上常见的通用的解决方案,各个公司可能都在使用,往往不具有复杂度。支撑域的系统在复杂度上不好评判,有的公司使用常见方案来满足业务需求,有的公司则为了提供更高的竞争力,独自研发支撑域系统。

易变性

核心子域可以经常更改。如果一个问题可以在第一次尝试中解决,这可能不是一个很好的竞争优势。因此,核心子领域的解决方案应运而生。必须对不同的实现进行试验、改进和优化。此外,核心子域的工作从未完成。公司不断创新和发展核心子领域。与核心子域相反,支持子域不会经常更改。尽管有现有的解决方案,但通用子域可以随着时间的推移而改变。这些更改可以以安全补丁、错误修复或整个版本的形式出现。

识别子域边界

在构建软件解决方案时,确定子域及其类型可以在很大程度上帮助做出不同的设计决策。领域分析的一个很好的起点是分析公司的部门和其他组织单位的基本结构。

提炼子域

粗粒度子域是一个很好的起点,但关键在于细节。我们必须确保没有遗漏隐藏在错综复杂的业务功能中的重要信息。

用例保持一致

从技术角度来看,子域类似于一组相互关联的、一致的用例(参与者、业务实体、数据)。我们可以使用“子域的用例保持一致”的定义作为何时停止寻找细粒度子域的指导原则。这些是子域最精确的边界。

需要努力确定核心子域的子域边界。核心子域是最重要、最不稳定、最复杂的。我们必须尽可能地提炼这些功能,因为这将允许我们提取所有通用和支持功能,并将精力投入到更专注的功能上。

 聚焦业务的本质

在寻找子域时,重要的是识别与软件无关的业务功能,将他们从核心业务范围中识别出来,并关注与您正在开发的软件系统相关的业务方面。

小结

公司的业务活动一切都始于业务领域:即公司运营的领域和向客户提供的服务。在业务领域中实现成功并使公司与其竞争对手区分开来的不同构建块:核心子域、通用子域、支持子域。

欢迎使用haptool.com(哈普工具),让程序员的工作更有效率。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB change stream实战

什么是 Chang Stream Change Stream指数据的变化事件流,MongoDB从3.6版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同: Change Stream 的实…

Linux其二设置端口号,静态ip以及命令

目录 1、VI编辑器 【linux版本的文本文件】 2) 补充的vi编辑器的其他内容(了解) 2、ln 连接的意思 link的缩写 3、文件的查看 【重点】 4、压缩与解压(重点) 5、find 查找命令 6、which & whereis 作用是一样的,表示某…

MetaGPT 安装

1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门

作为一个使用Node.js多年的开发者,我已经习惯于用Node.js写一些web应用来为工作服务,因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能:web路由。(观看此文的前提是默认你已经装好nonde.js了&#xf…

【后端面试总结】Redis字符串实现原理

字符串是我们平时接触频率最高的一个基础类型,但就是这么一个平平无奇的基本类型,在Redis里面也是经历了各种各样的优化,来优化它对内存的占用,了解这部分内容,与其说是“学习Redis”,不如说是“向Redis学习…

GitToolBox插件:让IntelliJ IDEA的Git操作如虎添翼

GitToolBox插件介绍 GitToolBox是一款针对IntelliJ IDEA的插件,旨在增强IDE内置的Git功能,使Git操作更加便捷和高效。无论是单独开发者还是团队中的一员,这个插件都能帮助更好地管理代码和协作流程。 功能特点 分支管理:GitToolBo…

Vulhub:Shiro[漏洞复现]

目录 CVE-2010-3863(Shiro未授权) 使用浏览器访问靶场主页面 使用Yakit进行抓包 使用ffuf对靶机8080端口进行根路径FUZZ CVE-2016-4437(Shiro-550) 使用浏览器访问靶场主页面 使用Yakit进行抓包 使用Yakit反连中自带的Yso-Java Hack进行漏洞利用 首先运行脚本生成一个…

Netty 框架——TCP 粘包和拆包

Netty 框架——TCP 粘包和拆包 1. 产生的原因 在 TCP 协议中,发送端为了提高网络传输的效率,通常会使用优化算法,如 Nagle 算法,将多个小的数据包合并成一个较大的数据块一起发送。这是因为频繁的小数据包传输可能会导致效率低下…

SQL靶场第九关攻略

我们的第九关需要用到时间盲注 使用条件:完全没有变化的页面 我们在了解一下时间盲注和布尔盲注的区别,时间盲注比布尔盲注多了一个if判断加上sleep()函数的运用 if(a,b,c) if判断句,a为条件,b、c为执行语句;如果a为…

STM32一keil5更换芯片后报错问题的解决。

目录 一、STM32型号认识二、报错问题三、常用的启动配置文件四、问题解决 一、STM32型号认识 二、报错问题 当我们在原来工程下修改芯片时,原本可以编译通过的代码突然很多报错。如下所示,这是因为我们的启动文件配置错误。对于不同型号的芯片其flash容量…

STM32 自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 RAM vs ROM vs FLASH 2013-09-05记录,ROM和RAM指的都是半导体存储器,ROM是Read Only …

深入解析 HTML Input 元素:构建交互性表单的核心

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

MBox20边缘计算网关:氢能车间数据采集的智慧引擎

氢能作为未来能源体系的重要组成部分,其安全、高效、环保的特性备受瞩目。在氢能车间的日常运营中,数据采集是确保生产流程优化、设备稳定运行及能效提升的关键环节。然而,面对氢能车间复杂多变的生产环境和海量数据,如何实现高效…

敏捷开发之路

1. 引言 最近有个企业软件开发项目,用户要求采用敏捷开发的方法实施项目。以前也参加过敏捷方法的培训,结合最近找的敏捷开发材料,形成了下面的敏捷实施过程内容。 以下采用了QAD量化敏捷开发方法,关于此方法详细参考内容见最后…

threejs相机辅助对象cameraHelper

为指定相机创建一个辅助对象,显示这个相机的视锥。 想要在场景里面显示相机的视锥,需要创建两个相机。 举个例子,场景中有个相机A,想要显示相机A的视锥,那么需要一个相机B,把B放在A的后面,两个…

Milvus向量数据库03-搜索理论

Milvus向量数据库03-搜索理论 1-ANN搜索 通过 k-最近邻(kNN)搜索可以找到一个查询向量的 k 个最近向量。kNN 算法将查询向量与向量空间中的每个向量进行比较,直到出现 k 个完全匹配的结果。尽管 kNN 搜索可以确保准确性,但十分耗…

解决git did not exit cleanly (exit code 128)问题

解决 git did not exit cleanly (exit code 128)问题 1、错误描述2、解决方法2.1 方法一2.2 方法二 1、错误描述 使用TortoiseGit进行操作时,总是提示下述错误。 2、解决方法 2.1 方法一 打开 TortoiseGit -> Settings 点击 Network&…

唇形同步视频生成工具:Wav2Lip

一、模型介绍 今天介绍一个唇形同步的工具-Wav2Lip;Wav2Lip是一种用于生成唇形同步(lip-sync)视频的深度学习算法,它能够根据输入的音频流自动为给定的人脸视频添加准确的口型动作。 (Paper) Wav2Lip模型…

ubuntu下Qt5自动编译配置QtMqtt环境(10)

文章目录 [toc]1、概述2、下载QtMqtt源码3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置; 网络所有的…

verilog编程规范

verilog编程规范 文章目录 verilog编程规范前言一、代码划分二、verilog编码ABCDEFG 前言 高内聚,低耦合,干净清爽的代码 一、代码划分 高内聚: 一个功能一个模块干净的接口提取公共的代码 低耦合: 模块之间低耦合尽量用少量…