首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

领域驱动设计(DDD):领域和子域

领域驱动设计中的领域 是指的业务领域。 大多数的技术人员对技术领域 中的知识比较感兴趣(狂热),因为这能够使得自己在技术方面有一些前沿性和探索性的实践。然而对于业务领域 中的知识就显得比较暗淡一些。...《领域驱动设计》中领域指的是一个特定的业务范围 ,大家在这个业务域范围内开展工作。 领域这个词承载了太多的含义。...subdomains 这是一个有关“零售商在线销售产品”的例子,来源于《实现领域驱动设计》。 把零售商中的所有业务看做成一个领域(业务域) ,把这个整体业务域中的每一个业务域看做成子域 。...这两个目的都是为了让核心域更加清晰和增强核心域的内聚性。 有关核心域的更多内容请阅读《领域驱动设计》中的第十五章,其中非常详细地阐述了如何明确核心域和实现核心域。...《实现领域驱动设计》中通过问题空间 和解决方案空间 对核心域做了更直接的说明: 问题空间是领域的一部分,对问题空间的开发将产生一个新的核心域。

1.3K40

如何运用领域驱动设计 - 实体

概述 本文将介绍领域驱动设计(DDD)战术模式中另一个常见且非常重要的概念 - 实体。相对战术模式中其他的一些概念(例如 值对象、领域服务等)来说,实体应该比较容易让人理解和运用。...何为实体 直接来看看原著《领域驱动设计:软件核心复杂性应对之道》 中对实体的解释: 实体(Entity,又称为Reference Object) 很多对象不是通过他们的属性定义的,而是通过一连串的连续事件和标识定义的...似曾相识 来想一下,我们在以传统的设计思路和开发过程中,我们会在什么情况下为一个对象赋予一个ID呢?给它赋予这个ID的作用呢?...这显然不符合我们设计的初衷。因此我们可以将所有属性的set私有化。所以,一定要注意,我们在考虑实体的时候,一定要知道“实体是高度内聚和自治的”(敲重点!!!!!)。...但是至少在现在,请相信自己的所见,认真考虑和发现你项目领域所拥有的值对象和实体,不要因为知道持久化的问题而放弃和妥协,这也是我们开发者应有的勇气。

76120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    DDD领域驱动设计实战(三)- 理解实体

    不应该通过对象的状态形式和历史来区分不同的实体对象……对于什么是相同的东西,模型应该给出定义。 那么如何正确地使用和设计实体?...3 唯一标识 在实体设计早期,关注能体现实体身份唯一性的主要属性和行为及如何查询实体,忽略次要的属性和行为。...详情参见 DDD领域驱动设计实战 - 创建实体身份标识的常用策略 3.2 标识稳定性 绝大多数场景不应修改实体的唯一标识,可在实体的整个生命周期中保持标识的稳定性。...aPassword, aPerson); return user; } 参考 https://tech.meituan.com/2017/12/22/ddd-in-practice.html 《实现领域驱动设计...》 实体和值对象:从领域模型的基础单元看系统设计

    1.5K32

    DDD领域驱动设计实战(一)-领域模型、子域、核心域、通用域和支撑域等核心概念

    领域模型的特点 对业务领域做了建模 细粒度的类,易于扩展,容易复用 可以应对复杂的业务逻辑 需要经验才能掌握 简单的领域模型 几乎和数据库中的表 一一对应 复杂领域模型 一使用了继承,组合,设计模式等各种手段...划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或业务范围。 DDD是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂度。 DDD的研究方法与自然科学类似。...领域可细分为不同子域,子域可根据自身重要性和功能属性划分为三类子域: 核心域 决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。...核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。...由于预算和资源有限,对不同类型子域应有不同关注度和资源投入策略。商业模式和战略方向决定公司在划分核心域、通用域和支撑域时的结果。

    1.5K20

    领域驱动设计之实体、值对象、领域服务

    建立领域模型的第一步就是需要识别出实体、值对象与领域服务。 一.实体 1.实体是领域中需要唯一标识的领域概念。通常在业务中,需要唯一标识与区分的对象并需要持续对它进行跟踪,这样的对象我们认为是实体。...2.如果两个实体所有状态都一样,但如果标识不一样,就是两个不同实体。比如订单对象就应该是实体,就算两个订单的订单日期、订单总额等信息都一样,只要标识不一样,比如订单号,我们就认为它们是不同的实体。...3.实体只保留必要的属性与行为。...比如一个客户实体应该保留客户的基本信息,但像国家、省、城市、街道等信息联合表示一个完整的概念,这种完整的概念应该迁移到其他实体或值对象上,这样有助于客户实体的理解和可维护性,并明确了清晰的职责。...比如借书领域中,账户、书与借书信息分别是三个实体(实际上分别是三个聚合的聚合根,聚合与聚合根后面文章再详细描述),借书的这个行为归于其中任何一个实体都不合适,虽然有一种认为是在账户实体上实现借书行为,将书作为参数传递给账户

    3.6K90

    DDD领域驱动设计实战(一)-领域模型、子域、核心域、通用域和支撑域等基本概念

    领域模型的特点 对业务领域建模: 细粒度的类,易扩展,易复用 可应对复杂业务逻辑 需要经验 简单的领域模型: 几乎和DB中的表一一对应 复杂领域模型 使用了继承,组合,设计模式等各种手段 2 子域 领域可再划分为多个子领域...每个子域对应一个更小的问题域或业务范围。 DDD是处理复杂领域的设计思想,它试图分离技术实现的复杂度。每个细分的领域都有一个知识体系,即DDD的领域模型。在所有子域研究完后,就建立了领域模型。...所以,还要继续划分子域,根据自身重要性和功能属性划分为: 2.1 核心域(Core Domain) 决定业务成功和公司核心竞争力的子域,整个系统最重要部分。...既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,但又必需。...为了区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度和资源投入策略不同: 核心域全力投入 支撑域次之 通用域甚至可以直接花钱买服务 3 总结 领域的核心思想是将问题域逐级细分

    1.7K20

    「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法

    作为Alberto Brandolini的心血结晶,它是Gamestorming和领域驱动设计(DDD)原则的综合学习实践。该技术不限于软件开发。...域事件有助于构建域模型;它们起到了骨骼的作用。这不是设计,它是关于域的模型 - 一个视角。您使用域事件来推动建模,因为技术人员和领域专家都很容易理解。...域事件几乎没有关于设计的说明,也没有关于实现的内容,这正是你想要的一个好的域模型。...虽然以域事件为中心的模型可能会自然地导致事件驱动的系统设计(EDA),例如事件源或命令查询责任隔离(CQRS),但这是一种选择,而不是义务。...使用协作组学习,您将实现快速的域驱动建模,而无需每个人都必须成为DDD专家,您的团队和术语将与业务领域专家的一致。

    2.3K31

    【领域驱动设计】Redux 和领域驱动设计

    Redux 的创建者 Dan Abramov 说他不知道什么是领域驱动设计。尽管如此,令人印象深刻的是 Redux 与 DDD 的相似之处。...理解两者,我们可以提供更好的实现;来自不同世界的两种方法相互碰撞并利用相同的设计原则。 领域驱动设计 领域驱动设计是一种软件建模技术,旨在创建强大的微服务架构以及集成多个现有解决方案。...Eric Evans 最初于 2003 年在《领域驱动设计:解决软件核心中的复杂性》一书中提出它。目前,DDD 有更多的书籍、更多的示例,并且已被证明可以有效地扩展和保持大型系统中的高级性能。...使用的抽象是查询、命令、域事件和聚合。应用程序将查询和命令指向聚合,聚合执行所有计算,域事件在整个系统中保持最终一致性。 战术的相关概念是: 查询:您可以对系统提出的任何问题。...它代表小块模型(理想情况下只有一个实体和几个对象值)。模型是合理隔离的。聚合通过查询、命令和域事件相互通信。他们消费领域事件以保持其状态一致,同时,他们为每个突变生成新的领域事件。

    1.5K30

    DDD领域驱动设计实战(三)-深入理解实体

    DDD领域驱动设计实战(03)-深入理解实体 1 前言 实体是领域模型中的领域对象。 官方解释:实体是指描述了领域中唯一的且可持续变化的抽象模型。...不应通过对象的状态形式和历史,来区分不同实体。对于什么是相同的东西,模型应该给出定义。 那么如何正确使用和设计实体呢?...3 唯一标识 实体设计早期: 关注能体现实体身份唯一性的主要属性和行为及如何查询实体 忽略次要的属性和行为 设计实体时,首先考虑实体的本质特征: 实体的唯一标识 对实体的查找 而不要一开始就关注实体的属性和行为...参见 DDD领域驱动设计实战 - 创建实体身份标识的常用策略 ### 3.2 标识稳定性 大多数场景不应修改实体的唯一标识,可在实体的整个生命周期中保持标识的稳定性。...aPassword, aPerson); return user; } 参考 https://tech.meituan.com/2017/12/22/ddd-in-practice.html 《实现领域驱动设计

    1.7K22

    DDD领域驱动设计实战(03)-深入理解实体

    不应通过对象的状态形式和历史,来区分不同实体。对于什么是相同的东西,模型应该给出定义。 那么如何正确使用和设计实体呢?...3 唯一标识 实体设计早期: 关注能体现实体身份唯一性的主要属性和行为及如何查询实体 忽略次要的属性和行为 设计实体时,首先考虑实体的本质特征: 实体的唯一标识 对实体的查找 而不要一开始就关注实体的属性和行为...参见 DDD领域驱动设计实战 - 创建实体身份标识的常用策略 3.2 标识稳定性 大多数场景不应修改实体的唯一标识,可在实体的整个生命周期中保持标识的稳定性。...aPassword, aPerson); return user; } 参考 https://tech.meituan.com/2017/12/22/ddd-in-practice.html 《实现领域驱动设计...》 实体和值对象:从领域模型的基础单元看系统设计 https://blog.csdn.net/Taobaojishu/article/details/106152641

    64520

    DDD领域驱动实战 - 子域、核心域、通用域和支撑域等核心概念

    DDD是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂度。 DDD的研究方法与自然科学类似。...领域可细分为不同子域,子域可根据自身重要性和功能属性划分为三类子域: 核心域 决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。...核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。...由于预算和资源有限,对不同类型子域应有不同关注度和资源投入策略。商业模式和战略方向决定公司在划分核心域、通用域和支撑域时的结果。...在公司领域细分、建立领域模型和系统建设时,就要结合公司战略重点和商业模式,找到核心域,且重点关注核心域。 总结 领域的核心思想是将问题域逐级细分,降低业务理解和系统实现的复杂度。

    5.9K43

    DDD领域驱动设计实战 - 创建实体身份标识的常用策略

    为避免上述问题,需重新设计。开发需采用无故障的方法来保证用户输入的确是唯一的身份标识。虽然基于工作流的标识审批过程,对于高吞吐量的领域并无多大帮助,但是它对于生成具有可读性的身份标识来说却是必需的。...本地标识表示在同一聚合中,一个实体的标识只需和该聚合中的其他实体区分即可。...3.1.3 另一个限界上下文提供唯一标识 若另一个限界上下文用于给实体标识赋值,那需要对每个标识进行查找、匹配和赋值。 最重要的是精确匹配。...外部实体的一些额外属性也可能被复制到本地实体。 缺陷 对象同步可能是个问题。外部对象的改变将如何影响本地对象?如何知道所关联的对象已经改变了呢? 可通过事件驱动架构和领域事件解决。...要维护本地实体,我们不但需要考虑由本地 领域行为所导致的改变,还需要将外部系统也考虑在内。所以在使用这种策略时,应持保守态度。 参考 《实现领域驱动设计》

    78520

    职责驱动设计和驱动概念的起源

    一旦定义了对象和职责,对象间就可以通过发送和接收消息来交互,完成系统的功能。 职责驱动设计的优点在于,它将对象看作是能够执行任务、解决问题和做出决策的实体,而不仅仅是被动的数据容器。...这样可以使得软件设计更加符合真实世界的工作方式,提高软件的可维护性和可扩展性。 "驱动"概念的起源 在软件开发中,"驱动"这个词的使用其实表达了一种理念:以某种特定的因素作为主导,推动整个开发过程。...这通常意味着我们把某个特定的目标或原则放在首位,并根据这个目标或原则来指导我们的设计和决策。...通过这样的方式,我们可以确保我们的焦点始终保持在最重要的事情上,从而提高我们工作的效率和质量。 总结,职责驱动设计是一种有效的面向对象设计策略,它强调对象的职责和行为,而非仅仅关注数据。"...驱动"这个词在软件开发中的使用,体现了我们以某种特定的原则或目标来指导我们的工作的理念。我希望这篇文章能帮助你更好地理解职责驱动设计以及"驱动"概念的意义。欢迎分享你的想法和经验!

    40520

    领域驱动设计-什么是领域驱动设计和怎么使用它

    这篇文章讨论领域驱动设计(DDD),DDD是建立在面向对象分析设计上开发软件的一种方法。 通过这篇文章我们解释什么是领域驱动设计,在现代开发周期中如何实现,使用DDD的优点和缺点。...什么是领域驱动设计 最先介绍领域驱动设计的是在程序员 Eric Evans 2004年出版的《领域驱动设计:复杂软件核心复杂应对之道》书籍中,领域驱动设计是领域概念的扩展和应用,并且将它应用在软件开发中...Evans的《领域驱动设计:复杂软件核心复杂性解决之道》一书中定义了几个常用的术语,在实践DDD和讨论DDD的时候非常有用。...构建块 领域驱动设计同样也定义了几个连接领域模型的高层次概念,以此来修改,创建领域模型。 .Entity(实体):连续状态变化的对象,而不是传统使用属性来定义的对象。....Aggregate(聚合):根据组边界定义值对象和实体的聚合, 而不是允许单个实体或者值对象执行它自己所有的动作,聚合的对象都有一个统一的根对象(在书籍中写的是选择一个实体作为根),这样,外部对象不再直接访问聚合内部的单个对象或者实体

    1.3K30

    「首席架构看领域驱动设计」领域驱动的设计和开发最佳实践

    背景 域驱动设计(DDD)是关于将业务域概念映射到软件构件的。关于这个主题的大多数文章和文章都是基于Eric Evans的《领域驱动设计》一书,主要从概念和设计的角度覆盖了领域建模和设计方面。...领域驱动设计在企业架构中的角色 领域建模和DDD在企业架构(EA)中扮演着重要的角色。自从EA的目标之一是保持IT与业务的单位,业务实体的域模型的表示,变成一个EA的核心部分。...域驱动设计工作从域建模结束的地方开始。Ramnivas Laddad介绍了如何实现域对象模型的以下步骤。他强调在域模型中更多地关注域对象而不是服务。 从域实体和域逻辑开始。...将此逻辑嵌入到域对象中会导致域层与非域相关代码的纠缠和混乱。 在没有对象之间的紧密耦合和隔离横切关注点的情况下管理代码依赖项时,OOP本身无法为域驱动的设计和开发提供优雅的设计解决方案。...支持DDD的设计模式 有几种设计模式可以帮助领域驱动的设计和开发。

    1.6K30

    DDD 领域驱动设计落地实践系列:战略设计和战术设计

    因此物流是电商业务的重要业务子域。...1、找出实体和值对象 经过全盘的业务梳理之后,我们可以在业务对象中找到对应的实体以及值对象,这里面就会牵扯到哪些领域对象设计为实体,哪些领域对象设计为值对象。主要还是根据实际的业务特征来决定。...另外随着DDD领域驱动设计的落地,需要对于微服务的工程结构有更进一步的进化和升级。 Eric Evans在《领域驱动设计:软件核心复杂性应对之道》文中提出了传统的四层结构,但是实际上存在一定的问题。...总结 本文主要围绕DDD领域驱动设计落地时间的三大过程进行了阐述,详细说明了战略设计阶段以及战术设计阶段的输入和输出。...希望对于大家怎么去实施DDD领域驱动设计有一个方向的指引,后面的文章将继续深入阐述DDD具体落地实践的细节和一些建议。

    88510

    数据如何驱动网站页面设计和优化

    下面这一段书摘,主要从电商网站艺术设计的角度,对首页长度、结构布局、首页商品撤换原则等方面,结合数据分析进行阐述。...图2 优化之后点击率与首页位置的关系 经典“F型”网页结构布局 说到网页结构的布局,不能不提到经典的“F型”结构,而此项结构来源于:长期研究网站可用性的美国著名网站设计师杰柯柏·尼尔森(Jakob...任何一种理论都有其使用的前提和环境,也就是外延,这一点非常重要。 站内搜索热词设置 电商网站首页除了页面长度和结构布局之外,还有导航页和搜索框可以进行相对精确的量化。...不同品类的导航页,设计的风格差异极大,重点在于推送品牌形象、利润高、覆盖面广、应季性等商品,这方面知识不准备展开叙述。关于站内搜索,一直以来都是电商重点关注和研究的领域。...图4 站内搜索框和搜索热词 一般站内搜索词筛选方式如下: —热词不需要多,一般不会超过十个,多了会模糊搜索目标。 —热词要结合跳失率和搜索量两个数据指标综合决定。

    95160
    领券