【DDD】业务领域定义

news2024/11/23 4:01:56

文章目录

  • 前言
  • 一、什么是业务子领域?
  • 二、子领域的类型有哪些?
    • 2.1、核心子领域
    • 2.2、通用子领域
    • 2.3、支撑子领域
  • 三、子领域差异对比
    • 3.1、竞争优势比较
    • 3.2、复杂性比较
    • 3.3、易变性比较
    • 3.4、实时策略比较
  • 总结

前言

一个业务领域是一个公司的主要活动领域的定义。通常这是每个公司向客户提供的服务。例如:

  • 联邦快递提供快递服务。
  • 星巴克以咖啡闻名。
  • 沃尔玛是最受认可的零售企业之一。

一家公司可以在多个业务领域中运作经营。例如,亚马逊同时提供零售和云计算服务。优步不仅是一家拼车公司,还提供送餐和共享自行车服务。

值得注意的是,公司可能会经常改变他们的业务领域。一个典型的例子是诺基亚,它多年来一直在木材加工、橡胶制造、电信和移动通信等多个领域开展业务。

一、什么是业务子领域?

为了实现其业务领域的发展达到预期目标,一家公司不得不在多个子领域中运作经营。子域是业务活动的一个细粒度领域。一个公司的所有子域构成其业务域:即公司提供给客户的主要服务。实现单个子域业务并不足以让一家公司取得成功。单个子业务领域只是总体系统中的一个组成部分。子域必须相互交互,以实现公司在其业务领域的目标。例如,星巴克最出名的可能是它的咖啡,但建立一个成功的咖啡馆连锁店,需要的不仅仅是知道如何做出很好的咖啡。还必须在有效的地点购买或出租房地产,雇佣人员,管理财务等其他领域活动。这些子域名本身都不能成为一个盈利的公司。所有这些子领域都是一个公司能够在其业务领域进行竞争所必需的。

二、子领域的类型有哪些?

正如软件系统由各种体系结构组件,如数据库、前端应用程序、后端服务和其他组件组成一样,子域具有不同的标准/业务价值。领域驱动的设计区分了三种类型的子域:核心域、通用域和支持域。让我们从公司战略的角度看看它们有何不同。

2.1、核心子领域

一个核心的子领域是一个公司最具竞争力且与众不同的。这可能涉及发明新的产品或新服务,或通过优化现有的工艺来降低成本。

拿优步举例。最初,该公司提供了一种新颖的打车方式:拼车。随着竞争对手的追赶,优步找到了优化和发展其核心业务的方法:例如,通过匹配前往同一方向的乘客来降低成本。优步的核心子领域影响了其底线。这就是该公司与竞争对手的区别。这是该公司为其客户提供更好的服务且将其盈利能力最大化的策略。为了保持竞争优势,核心子领域包括发明、智能优化、商业知识或其他知识产权。

再举一个例子:谷歌搜索的排名算法。在撰写本文时,谷歌的广告平台收入占了谷歌整体利润的大部分。也就是说,谷歌的广告不是一个子域,而是一个独立的业务领域。由以下子域组成并支撑其运作,谷歌云计算服务(谷歌云平台),谷歌协同平台(谷歌工作区)等。但是谷歌搜索及其排名算法呢?虽然搜索引擎不是付费服务,但它是谷歌广告依赖的最大的平台,它提供优秀搜索结果的能力是推动流量的原因,随后,它是广告平台形式的一个重要组成部分。如果算法出现错误或这竞争对手提供更好的搜索服务,谷歌的搜索结果将会损害广告业务的收入。因此,对于谷歌,排名算法是一个核心子域。

复杂性,一个简单实现的核心子域只能提供一个短暂的竞争优势。因此,核心子域通常是复杂的。继续用优步举例,该公司通过创造性的技术,创造了一个新的拼车市场,改变了几十年前的出租车行业模式。通过深度了解出租车业务领域,优步设计出了一种更可靠和更透明的交通方式。一个公司的核心业务应该有很高的进入门槛,竞争对手应该很难复制或模仿公司的解决方案。

竞争优势的来源,需要注意的是,核心子域并不一定是技术性的。并非所有的业务问题都能通过算法或技术来解决。一个公司的竞争优势有多种来源。

例如,有一家珠宝制造商在网上销售。网上商店很重要,但它不是一个核心的子域,而珠宝设计才是。该公司可以在市面上现成平台开通网上商店,或者使用现成技术方案打造自己的网店,但是它的珠宝设计不能外包。客户之所以青睐这个珠宝制造商的产品并记住这个品牌,就是因为这家珠宝商的设计。

举一个更复杂的例子,比如有一家专门人工风险欺诈检测的公司。该公司培训它的分析师检查可疑信息,并标记潜在的欺诈案件。您要设计这个风控检测系统给分析师使用,这个是这家公司的核心子域么?不是的,风险分析师们所做的工作才是核心。

核心子域与核心域之间的关系:核心子域也被称为核心域。例如,在《领域驱动设计》一书中,Eric Evans可以互换地使用“核心子域”和“核心域”。 但是在本文中,我更倾向使用核心子域这个概念,避免与业务核心域概念混淆。

2.2、通用子领域

通用子域是所有公司都以相同的方式执行的业务活动。与核心子域一样,通用子域通常是复杂的,很难实现。然而,通用子域并不能成为公司竞争的优势。通用子领域不需要更多创新或者优化:它经过了市场的广泛验证,而且所有的公司都在使用它们。

例如,大多数系统都需要对其用户进行身份验证和授权。使用市面上现成的解决方案更有意义,而不是发明一种专有的身份验证机制。这种解决方案可能更可靠和安全,因为它已经被许多其他有同样需求的公司进行了验证。

回到一个珠宝制造商开网店的例子,珠宝设计是一个核心的子域,但网上商店则是一个通用的子域。与竞争对手使用相同的在线零售平台,相同的通用解决方案,不会影响珠宝制造商的竞争优势。

2.3、支撑子领域

顾名思义,支撑子领域对公司的业务主要是支撑作用。然而,与核心子域相反,支撑子域对公司的核心竞争起不到帮助作用。

例如,一家在线广告公司,它的核心子域包括将广告与浏览者进行匹配,优化广告的有效触达,以及最小化广告投放的成本。然而,为了在这些领域取得成功,该公司需要对其创意素材进行分类。该公司存储和检索其实体创意材料的方式,如横幅和渲染页面,并不会影响其利润。在这个领域,没有什么可以创新和优化的。另一方面,创造性的编排管理对于实施公司的广告管理和服务系统至关重要。这使得内容编排解决方案成为该公司的支持子域之一。

支撑子域的独特特点是解决业务逻辑的复杂性。支撑子域逻辑很简单。他们的业务逻辑主要包括数据输入和ETL(提取、转换、加载)操作;即所谓的CRUD(创建、读取、更新和删除)接口。这些领域活动不为公司提供任何竞争优势,因此不需要很高的进入门槛。

三、子领域差异对比

现在我们对这三种类型的业务子域有了更深入的理解,让我们从其他角度来探讨它们之间的差异,看看它们是如何影响战略软件设计决策的。

3.1、竞争优势比较

只有核心子域才能为一个公司提供竞争优势。核心子域是该公司区别于竞争对手的核心战略。

根据定义,通用子域不能成为任何竞争领域的来源。这些都是通用的解决方案——与公司竞争对手使用的解决方案相同。

支撑子域具有较低的进入壁垒,也不能为公司的竞争提供什么优势。通常,公司不介意竞争对手复制其支撑子域技术或者业务能力,这不会影响其在行业的竞争力。相反,从战略上讲,公司更希望其支撑子域是通用的、现成的解决方案,从而避免重复造轮子带来的损耗。

一个公司能够解决的问题越复杂,它能提供的商业价值就越大。复杂的问题并不局限于向客户提供服务这一方面。例如,解决一个复杂的问题可能是使业务更加灵活和高效。例如,以较低的运营成本,提供与竞争对手相同的服务水平,也是一种竞争优势。

3.2、复杂性比较

技术从业者的角度来看,识别并组合子领域是很重要的,因为不同类型的子域具有不同的复杂级别。

在设计软件时,我们必须选择工具和技术来适配业务需求的复杂性。因此,识别子域对于设计一个可靠的软件解决方案至关重要。

支撑子域的业务逻辑很简单。这些都是基本的ETL操作和CRUD接口,其业务逻辑是显而易见的。通常,它的复杂度不会超越输入参数校验或将数据结构转换。

通用子域要比支撑子域复杂得多。有一部分公司或者个人已经投入了时间和精力来解决这些问题,也能说明一些问题,这种复杂度也值得花时间。这些解决方案既不简单,也不平凡。例如,加密算法或身份验证机制。从知识可用性的角度来看,通用子域是“已知的未知数”。这些都是你可能知道某个技术或某个方案,但是你不知道其具体实现,但是拿来直接用很容易。您可以使用被行业内认可的成熟方案,也可以根据需要,聘请一名专门从事该领域的顾问来帮助设计一个定制的解决方案。

核心子域是复杂的。竞争对手很难复制某个公司的核心领域业务,因为公司的盈利能力主要靠的是核心子域。这就是为什么从战略上讲,一些公司正在寻求解决复杂的问题来作为他们的核心子领域。

有时候,区分核心子域和支撑子域可能具有挑战性。根据业务复杂性来区分,是一个比较有用的办法。询问相关子域是否可以转变为辅助业务,是否有人愿意花钱来购买该子域解决方案么?如果有的话,那么该子域就是核心子域。类似的推理也适用于区分支撑子域和通用子域:自己实现该领域业务会比集成外部现有方案更简单更便宜么?如果是,则这是一个支撑子域。

从技术的角度出发,识别业务复杂性,对核心子域的软件设计是很重要的。正如我们前面讨论的,核心子领域不一定与软件相关。在Coding之前,需要对业务进行建模和实现设计,识别核心子域业务的复杂性,对于方案设计至关重要。业务逻辑只是类似于数据输入校验和CRUD接口,还是必须实现复杂的算法规则或由复杂的业务规则和变量串联业务流程呢?前者是一个支撑子域的标志,而后者是一个典型的核心子域。

下图可以直观比较通用子域、支撑子域、核心子域的业务逻辑复杂性和业务差异性(业务价值)。
在这里插入图片描述

3.3、易变性比较

如前面所述,核心子域业务逻辑可能经常变更。如果一个问题能在第一次尝试时就得到解决,那么这可能并不能成为一个公司的核心竞争优势,因为竞争对手将会很快也能实现并追赶上来。因此,针对核心子域问题的解决方案是比较急迫的。必须不停地尝试、改进和优化不同的实现方案。但是核心子域的工作也不仅如此。公司需要不断创新和发展核心子领域。这些变化的形式是添加新特性或优化现有功能。无论如何,其核心子领域的不断发展对于一家公司在行业内保持领先地位是至关重要的。

与核心子域相反,支撑子域并不经常发生变化。它不会为公司提供任何竞争优势,因此,与投资于核心子域的相同的努力相比,在支撑子域下功夫对核心业务价值提升微乎其微。

尽管是现有的解决方案,通用子域仍然可以随着时间的推移而改变。这些更改可以以安全补丁、bugfix或针对通用问题的全新解决方案的形式出现。

3.4、实时策略比较

核心子域为该公司提供了与同行竞争的关键能力。这是一种业务关键性的责任,但这是否意味着支撑和通用子域并不重要?当然不是。公司在其业务域中工作都需要使用所有子域。子域就像基本的构建模块:拿走一个,整个结构可能会倒塌。也就是说,我们可以利用不同类型的子领域特征来选择实现策略,以最有效的方式实现每种类型的子域。核心子域必须在公司内部实现,不能购买或采用,这将对公司核心竞争优势造成破坏,因为该公司的竞争对手也可以这样做。

外包一个核心子域的实现也是不明智的。这是一项战略投资。在核心子领域上偷工减料不仅在短期内有风险,而且在长期内可能会产生致命的后果:例如,无法维护的代码库,无法支持公司的战略目标。公司内部最高端的人才应该被分配到其核心子领域去工作。公司自研实现核心子域可以让公司更快地做出更改和发展解决方案,从而在更短的时间内建立竞争优势。

由于核心子域的需求需要经常且不断地变化,因此解决方案必须具有可维护和易于发展。因此,核心子域需要用最先进的工程技术去实现。

虽然通用子域很困难,但已经解决了问题,因此购买现成的产品或采用开源解决方案比投入时间和精力来实现一个内部通用子域解决问题更有效。

与通用子域不同,虽然支撑子域也缺乏竞争优势,但是没有现成的解决方案可用,在内部实现支撑子域也是合理的。因此,公司别无选择,只能自己实现支持子域。这就是说,业务逻辑的简单性和更改的不频繁性使得抄近路变得很容易。

支撑子域不需要复杂的设计模式或其他先进的技术栈。一个快速应用程序开发框架足以实现业务逻辑,也不会带来额外的复杂度。

从人员分配的角度来看,支撑子领域不需要高端的技术人才,应该安排有潜力的初级、中级人员来实现支撑子域逻辑,进行锻炼。从而节省团队中有经验应对核心子域复杂挑战的工程师。最后,由于业务逻辑的相对简单,可以优先选择外包方式实现支撑子域。

总结

通过一下表格,总结下不同类型子领域的差异:

子领域类型竞争优势复杂性易变性实施策略关注度
核心子域自研
通用子域购买/外采已解决
支撑子域自研/外包一般

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

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

相关文章

python:基于GeoPandas和GeoViews库将GEDI激光高程数据映射到交互式地图

作者:CSDN @ _养乐多_ 本文将介绍 GEDI(Global Ecosystem Dynamics Investigation)激光雷达数据某数据点波形数据提取,并绘制图表,添加其他图表元素并使图表具有交互性。 在本文中,我们将探索如何打开、读取和处理GEDI数据,并利用地理信息处理库GeoPandas和地理空间数…

Postman和Jmeter做接口测试的区别

1. 用例组织方式 Jmeter的组织方式相对比较扁平,它首先没有WorkSpace的概念,直接是TestPlan,TestPlan下创建的Threads Group就相当于TestCase,并没有TestSuite的层级。 Postman功能上更简单,组织方式也更轻量级&#…

【枚举】CF978 D

Problem - D - Codeforces 题意: 思路: 所谓枚举,就是要利用隐含条件找出不明显的小数据,即状态数很少 这道题中,因为是等差数列,且每个数只能被1或-1一次 确定了前两个数和公差之后,数列就…

sqlite触发器1

SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。 SQLite 只支持 FOR EACH ROW 触发器(Trigger),没有 FOR EACH STATEM…

力扣15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1…

C# 存在重复元素 II

219 存在重复元素 II 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a…

ESP-C3入门20. CentOS开发环境及Jenkins流水线

一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…

通过电商项目,详解抓包到接口测试,附图片验证码 +cookie 问题处理!

通常来说&#xff0c;进行接口测试&#xff0c;开发会提供对应的接口文档给到测试&#xff0c;但也有例外。开发无接口文档&#xff0c;但领导又需要你对刚开发的软件&#xff0c;进行接口测试、接口自动化测试、甚至是性能测试。这个时候作为专业测试应该怎么办&#xff1f; …

CPU渲染or GPU渲染,你选对了吗?看完这六点就懂了!

在进行动画或效果图渲染时&#xff0c;选择适合的渲染方式对于项目的速度和质量至关重要。CPU渲染和GPU渲染作为两种主要的渲染方式&#xff0c;哪一种更适合你现在的情况&#xff1f;接下来我将从以下六个方面带大家深入了解&#xff0c;看完就知道怎么选了。 1.渲染原理 CPU…

微信内测朋友圈可以置顶了!

今天一大早 #微信内测朋友圈可以置顶了# 冲上热搜第一 微信朋友圈是微信用户分享生活点滴、展示自我风采的重要平台&#xff0c;也是用户与好友互动、交流感情的重要渠道。 然而&#xff0c;由于朋友圈的时间线机制&#xff0c;用户发布的内容往往会随着时间推移而淹没在海量…

【开发环境】Windows下搭建TVM编译器

关于搭建TVM编译器的官方文档&#xff1a;Install from Source — tvm 0.14.dev0 documentation (apache.org) 1. 安装Anaconda 首先我们需要安装Anaconda&#xff0c;因为其中包含着我们所需要的各类依赖&#xff1a; 进入Anaconda官网https://www.anaconda.com/products/d…

element中el-input组件限制输入条件(数字、特殊字符)

1、只能输入纯数字 <el-input v-model"aaa" type"text" input"(v)>(aaav.replace(/[^\d]/g,))" /> 2、只能输入纯数字和小数&#xff08;比如&#xff1a;6.66&#xff09; <el-input v-model"aaa" type"text&quo…

Rocky Linux 8.4在Tesla P100服务器里的部署及显卡cudnn安装-极度精简

安装Rocky linux教程 https://developer.aliyun.com/article/1074889 注意事项 Tesla P100服务器&#xff0c;按Delete进入bios,设置Daul模式&#xff0c;第一选项选UEFI hard disk(用驱动盘选这个)&#xff0c;usb的就选UEFI usb 安装rocky linux时&#xff0c;这两项默认&…

搭扑克牌塔题解

输入样例&#xff1a; 5 3 14 15 24 1输出样例&#xff1a; 1 2 1 3 0思路分析&#xff1a; 首先搭每个金字塔所需的扑克牌数并不会由n决定&#xff0c;所以我首先想到打表。抱着信心尝试一番之后 既然文件太大提交不了&#xff0c;那我们就放弃:&#xff0c;怎么可能&…

day39-Password Strength Background(密码强度背景)

50 天学习 50 个项目 - HTMLCSS and JavaScript day39-Password Strength Background&#xff08;密码强度背景&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&quo…

【MySQL】之复合查询

【MySQL】之复合查询 基本查询多表查询笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from子句中使用子查询 合并查询小练习 基本查询 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为大写的J按照部门号升序而雇员的工资降序排序使用…

WebRTC Simulcast介绍

原文地址&#x1f447; https://blog.livekit.io/an-introduction-to-webrtc-simulcast-6c5f1f6402eb/ 你想知道的关于Simulcast的一切 Simulcast是WebRTC中最酷的功能之一,它允许WebRTC会议在参与者网络连接不可预测的情况下进行扩展。在这篇文章中,我们将深入探讨Simulcas…

uniapp使用自定义导航栏和手机自带的状态栏重叠

【问题界面】&#xff1a; 【正常界面】&#xff1a; 【解决方法】&#xff1a; 在页面顶部添加代码<!-- #ifndef H5 --> <statusBar></statusBar> <!-- #endif --> 2.引入占位条并注册 import statusBar from "/uni_modules/uni-nav-bar/c…

基于云平台的智慧养殖远程监控系统

项目背景 冬春季节每天的温度和昼夜温差变化很大&#xff0c;为保证养殖动物有一个温暖舒适的生存环境&#xff0c;使动物的生产性能得到较好的发挥&#xff0c;须注意做好温度、湿度、通风等方面的控制。 智慧养殖智能监控系统可以实现对如温度、湿度、气体浓度、光照度等参数…

2023五大自动化测试的 Python 框架

自2018年被评选为编程语言以来&#xff0c;Python在各大排行榜上一直都是名列前茅。目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因此&a…