领域驱动设计:AggregateRoot核心解析

领域驱动设计(DDD)笔记(二)代码组织原则 具体概括一下领域驱动设计如何落地到具体的工程代码上面 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

🌟 领域驱动设计(DDD)中的AggregateRoot

🍊 AggregateRoot概述

AggregateRoot是领域驱动设计(DDD)中的一个核心概念,它代表了一个业务领域中的复杂实体。它由多个实体和值对象组成,具有明确的边界和生命周期。

🎉 AggregateRoot的定义

AggregateRoot是一个业务领域中的复杂实体,它由多个实体和值对象组成,具有以下特点:

  • 边界:AggregateRoot具有明确的边界,它封装了内部状态和行为,外部系统只能通过AggregateRoot提供的接口与之交互。
  • 生命周期:AggregateRoot的生命周期由其所属的领域模型控制,外部系统不能随意创建、修改或删除AggregateRoot。
  • 完整性:AggregateRoot的完整性由其内部状态保证,外部系统不能修改AggregateRoot的内部状态。
  • 变更管理:AggregateRoot的变更需要遵循一定的规则,例如,只能通过命令来修改AggregateRoot的状态。
  • 查询与命令分离:AggregateRoot提供查询接口和命令接口,查询接口用于获取AggregateRoot的状态,命令接口用于修改AggregateRoot的状态。

🍊 AggregateRoot的作用

AggregateRoot在软件开发中扮演着至关重要的角色,其主要作用包括:

  1. 封装业务逻辑:AggregateRoot将业务逻辑封装在内部,外部系统只能通过AggregateRoot提供的接口与之交互,从而降低系统之间的耦合度。
  2. 保证数据一致性:AggregateRoot的完整性由其内部状态保证,外部系统不能修改AggregateRoot的内部状态,从而保证数据的一致性。
  3. 提高代码可维护性:AggregateRoot将业务逻辑封装在内部,外部系统只需关注与AggregateRoot的交互,从而提高代码的可维护性。

🍊 AggregateRoot与实体和值对象的关系

  • 实体:实体是具有唯一标识的AggregateRoot,例如,用户、订单等。
  • 值对象:值对象是具有固定值的对象,例如,日期、地址等。值对象通常作为AggregateRoot的属性存在。

🍊 AggregateRoot的边界

AggregateRoot的边界可以通过以下方式定义:

  • 接口:通过AggregateRoot提供的接口定义边界,外部系统只能通过接口与AggregateRoot交互。
  • 数据库表:通过AggregateRoot对应的数据库表定义边界,外部系统只能通过数据库表与AggregateRoot交互。

🍊 AggregateRoot的标识

AggregateRoot的标识可以是以下几种:

  • 自增ID:使用数据库自增ID作为AggregateRoot的标识。
  • UUID:使用UUID作为AggregateRoot的标识。
  • 复合键:使用多个属性作为AggregateRoot的标识。

🍊 AggregateRoot的完整性

AggregateRoot的完整性可以通过以下方式保证:

  • 封装:将AggregateRoot的内部状态封装在内部,外部系统不能直接修改。
  • 校验:在AggregateRoot的变更方法中添加校验逻辑,确保变更后的状态满足业务规则。

🍊 AggregateRoot的变更管理

AggregateRoot的变更管理可以通过以下方式实现:

  • 命令模式:使用命令模式封装AggregateRoot的变更操作,确保变更操作的原子性。
  • 事件驱动:使用事件驱动的方式记录AggregateRoot的变更,便于追踪和审计。

🍊 AggregateRoot的查询与命令分离

AggregateRoot的查询与命令分离可以通过以下方式实现:

  • 接口:将查询接口和命令接口定义在不同的接口中,外部系统根据需要调用相应的接口。
  • 服务层:使用服务层将查询和命令逻辑分离,外部系统通过服务层与AggregateRoot交互。

🍊 AggregateRoot在领域模型中的作用

AggregateRoot在领域模型中发挥着重要作用,具体如下:

  1. 封装业务逻辑:AggregateRoot封装了业务逻辑,降低了系统之间的耦合度。
  2. 提高代码可维护性:AggregateRoot将业务逻辑封装在内部,外部系统只需关注与AggregateRoot的交互。
  3. 保证数据一致性:AggregateRoot的完整性由其内部状态保证,外部系统不能修改AggregateRoot的内部状态。

🍊 AggregateRoot在系统设计中的应用

AggregateRoot在系统设计中的应用主要体现在以下几个方面:

  1. 降低系统耦合度:AggregateRoot将业务逻辑封装在内部,外部系统只能通过AggregateRoot提供的接口与之交互,从而降低系统之间的耦合度。
  2. 提高代码可维护性:AggregateRoot将业务逻辑封装在内部,外部系统只需关注与AggregateRoot的交互,从而提高代码的可维护性。
  3. 保证数据一致性:AggregateRoot的完整性由其内部状态保证,外部系统不能修改AggregateRoot的内部状态。

🍊 AggregateRoot与领域服务的交互

AggregateRoot与领域服务的交互主要包括以下两个方面:

  1. 调用领域服务:AggregateRoot可以调用领域服务来执行一些复杂的业务逻辑。
  2. 提供领域服务:AggregateRoot可以提供领域服务,供其他AggregateRoot或实体调用。

🍊 AggregateRoot的持久化策略

AggregateRoot的持久化策略主要包括以下两种:

  1. 数据库表:将AggregateRoot的内部状态持久化到数据库表中。
  2. 文档存储:将AggregateRoot的内部状态持久化到文档存储系统中。

🍊 AggregateRoot的版本控制

AggregateRoot的版本控制可以通过以下两种方式实现:

  1. 数据库版本控制:使用数据库版本控制机制来管理AggregateRoot的版本。
  2. 代码版本控制:使用代码版本控制机制来管理AggregateRoot的代码。

🍊 AggregateRoot的并发控制

AggregateRoot的并发控制可以通过以下两种方式实现:

  1. 乐观锁:使用乐观锁机制来处理AggregateRoot的并发访问。
  2. 悲观锁:使用悲观锁机制来处理AggregateRoot的并发访问。

🍊 AggregateRoot的单元测试

AggregateRoot的单元测试主要包括以下两个方面:

  1. 模拟依赖:使用模拟(Mock)技术模拟AggregateRoot的依赖。
  2. 测试用例:编写测试用例来验证AggregateRoot的功能。

🍊 AggregateRoot的集成测试

AggregateRoot的集成测试主要包括以下两个方面:

  1. 集成测试环境:搭建集成测试环境,将AggregateRoot与其他系统组件集成。
  2. 测试用例:编写测试用例来验证AggregateRoot与其他系统组件的交互。

🍊 AggregateRoot的性能优化

AggregateRoot的性能优化主要包括以下两个方面:

  1. 缓存:使用缓存技术来提高AggregateRoot的查询性能。
  2. 索引:使用索引技术来提高AggregateRoot的查询性能。

🍊 AggregateRoot的演进与重构

AggregateRoot的演进与重构主要包括以下两个方面:

  1. 重构:根据业务需求对AggregateRoot进行重构,提高代码质量。
  2. 演进:随着业务的发展,AggregateRoot的功能和结构可能会发生变化,需要对其进行演进。

🎉 重构策略

  • 模块化:将AggregateRoot拆分成更小的模块,提高代码的可读性和可维护性。
  • 抽象:将重复的业务逻辑抽象成公共方法或类,减少代码冗余。
  • 优化:优化AggregateRoot的算法和数据处理方式,提高性能。

🎉 演进策略

  • 扩展性:根据业务需求扩展AggregateRoot的功能,例如,添加新的属性或方法。
  • 兼容性:保持AggregateRoot的向后兼容性,确保旧的业务逻辑不受影响。
  • 性能:优化AggregateRoot的性能,提高系统的响应速度。

🎉 表格说明

重构策略描述
模块化将AggregateRoot拆分成更小的模块,提高代码的可读性和可维护性。
抽象将重复的业务逻辑抽象成公共方法或类,减少代码冗余。
优化优化AggregateRoot的算法和数据处理方式,提高性能。
演进策略描述
扩展性根据业务需求扩展AggregateRoot的功能,例如,添加新的属性或方法。
兼容性保持AggregateRoot的向后兼容性,确保旧的业务逻辑不受影响。
性能优化AggregateRoot的性能,提高系统的响应速度。

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

产业园区如何高效对接企业技术需求与高校科研成果?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

OpenFeign, Zuul, Gateway相互不兼容的问题总结

版本 Lib Vresion spring-cloud-starter-gateway 3.1.0 spring-cloud-dependencies 2021.0.0 spring-cloud-starter-netflix-zuul 2.2.6.RELEASE spring-cloud-starter-openfeign 3.1.0 1. Zuul 与OpenFeign 一起使用的问题 错误信息 jav.

Harry的博客 4132

Spring Data Relational核心概念:聚合根与领域驱动设计实践

Spring Data Relational是Spring生态中处理关系型数据库的核心框架,集成了Spring Data JDBC和Spring Data R2DBC两大模块,为领域驱动设计(DDD)提供了强大的技术支持。本文将深入解析聚合根这一核心概念,以及如何在Spring Data Relational中实践领域驱动设计。 ## 什么是聚合根? 在领域驱动设计中,聚合根(Aggregat

gitblog_00957的博客 726

六轴机械臂正逆解计算

机械臂运动学就是。包括(Forward Kinematics)和(InverseKinematics)两部分。正运动学就是逆运动学则是关节变量->机械臂末端执行器的姿势=正向运动学机械臂未端执行器的位姿->关节变量=逆向运动学。

gaoxiaochan的博客 1万+

DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)

将实体(Entity)和值对象(ValueObject)组成聚合(Aggregate),再根据业务语义将多个聚合划定到同一个限界上下文(Bounded Context)中,并在限界上下文内完成领域建模。 注意思考: 聚合只是将一些共享父类、密切关联的对象聚集成一个对象树吗? 如果是这样,对于存在于这个树中的对象有没有一个实用的数目限制? 既然一个聚合可以引用另一个聚合,我们是否可以深度地递归遍 历下去,并且在此过程中修改对象呢? 聚合的不变条件和一致性边界究竟是什么意思? 聚合 实体一般对应业务对象,具有

JavaEdge全是干货的技术号 1万+

外骨骼机器人(二):自适应振荡器

振荡器是一种数学工具,可以用于实时跟踪、预测类周期信号的频率、相位、幅值等,而助行外骨骼机器人需要自动适应人体的行走频率、幅度,两者相结合,就能使助行外骨骼机器人拥有更舒适、更自然的行走步态。 ......

行者无疆的博客 4264

【Java开发者必看】LangChain4j实战指南:使用AIService轻松集成聊天记忆Chat Memory到SpringBoot应用,通过封装多轮复杂对话,使聊天记忆的实现变得简单

聊天记忆是指在与用户的多轮对话过程中,能够记住之前的交互内容,从而提供更加连贯和个性化的回复。LangChain4j支持通过ChatMemoryProvider接口实现聊天记忆功能。

Spring Boot-Common On With You 448

CleanArchitecture核心层深度剖析:领域模型与业务逻辑

CleanArchitecture核心层深度剖析:领域模型与业务逻辑 【免费下载链接】CleanArchitecture CleanArchitecture 是一个基于.NET Core的应用程序模板项目,遵循干净架构原则。它为软件项目提供了一个清晰的分层结构,有助于分离关注点、提升可维护性和重用性。适合用于构建具有良好...

gitblog_00090的博客 1133

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。

猿小白的博客 1167

jMolecules实战指南:用注解构建清晰可维护的领域驱动设计架构

在当今复杂的企业应用开发中,如何让代码清晰地表达业务领域概念,同时保持架构的整洁性和可维护性,是每个开发团队面临的挑战。jMolecules项目正是为了解决这一问题而生——它提供了一套完整的Java注解库,帮助开发者在代码中直接表达架构抽象和领域驱动设计(DDD)概念,从而构建出更加健壮、可读性更强的业务系统。 ## 🔍 问题场景:领域概念与技术实现混为一谈 传统Java开发中,我们经常面临

gitblog_00502的博客 639

【QT开发教程】使用Qt进行NFC编程

近场通信(NFC,Near Field Communication)技术广泛应用于现代设备中,例如智能手机、支付终端和门禁系统。Qt提供了一套完整的NFC模块,使开发者可以轻松地在应用程序中实现NFC功能。本文将介绍如何在Qt中进行NFC编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 1469

大模型量化方法总结

本文主要对大模型量化方法进行了总结,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 模型精度 3. 量化方法 3.1 方法一 3.2 方法二 3.3 方法三

herosunly的博客 1万+

jMolecules架构解析:领域驱动设计中的聚合根与值对象深度实战指南

在Java企业级应用开发中,jmolecules库为开发者提供了一套优雅的架构抽象表达工具,通过注解和接口系统帮助团队在代码层面实现领域驱动设计(DDD)的核心概念。本文深入解析jmolecules中**聚合根(AggregateRoot)**与**值对象(ValueObject)**的设计原理、实现机制和最佳实践,为有经验的开发者提供架构层面的深度技术指导。 ## 技术背景与项目定位 jmo

gitblog_01199的博客 855

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

DDD领域驱动设计

有幸参与了一些领域驱动的项目,读了一些文章,也见识了一些不伦不类的架构,感觉对领域驱动有了更进一步的认识。所以今天跟大伙探讨一下领域驱动设计,同时也对一些想要实践领域驱动设计却又无处下手,或者一些正在实践却又说不上领域驱动设计到底好在哪的朋友一些指引方向。当然对于”领域驱动设计”这个主题而言从来不乏争论,所以大家可以在畅所欲言。 为什么要使用领域驱动设计? 从Eric Evans的《领域驱动设...

weixin_33928137的博客 133

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

领域驱动设计实战:从通用语言到聚合设计的核心模式解析

在应对复杂业务系统的软件开发中,领域驱动设计(DDD)提供了一套核心的思维框架与设计原则。其原理在于通过建立统一的业务语义模型,将复杂的业务逻辑映射到清晰的软件结构中,从而提升系统的可维护性与扩展性。这一方法的技术价值在于,它能够有效管理软件核心复杂度,使代码结构随业务演进而保持清晰。其关键应用场景包括电商、金融等业务规则多变且核心逻辑复杂的系统。本文聚焦于DDD最核心的战术构建块,深入探讨了如何通过建立无歧义的通用语言来统一团队认知,并详细解析了作为一致性边界的聚合设计艺术,旨在为面临业务爆炸增长的工程团

weixin_34082789的博客 676

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

DDD领域驱动设计实战-理解聚合(Aggregate)和聚合根(AggregateRoot)

将实体(Entity)和值对象(ValueObject)组成聚合(Aggregate),再根据业务语义将多个聚合划定到同一个限界上下文(Bounded Context)中,并在限界上下文内完成领域建模。 聚合只是单纯将一些共享父类、密切关联的对象聚集成一个对象树吗? 如果是这样,对于存在于这个树中的对象有没有一个实用的数目限制? 既然一个聚合可以引用另一个聚合,是否可以深度遍历下去,并且在此过程中修改对象? 聚合的不变条件和一致性边界究竟什么意思? 1 聚合 实体一般对应业务对象,具有业务属性和业务行

lwplvx的专栏 2388

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TaskoMask中的DDD实践:领域驱动设计在任务管理系统中的终极应用案例

TaskoMask是一个基于.NET 8构建的任务管理系统,融合了微服务、DDD(领域驱动设计)、CQRS、事件溯源和测试等概念。本文将深入探讨TaskoMask如何通过领域驱动设计思想,构建出灵活、可维护且业务价值清晰的任务管理解决方案。 ## 领域驱动设计在任务管理系统中的核心价值 领域驱动设计(DDD)为复杂业务系统提供了一套设计方法论,特别适合任务管理这类业务规则丰富的应用。在Task

gitblog_00922的博客 826

ASP.NET Boilerplate N 层架构解析:基于传统分层架构与领域驱动设计的现代化多层应用模型

本篇技术指南围绕 ASP.NET Boilerplate 官方文档 [NLayer-Architecture.md](https://link.gitcode.com/i/92b3f87fd10e5e618c37ac0cf0e47e3c) 展开,系统讲解该框架如何在**传统 N 层架构**与**领域驱动设计(DDD)**的基础上,为现代 Web 应用规划出"客户端应用、表现层、分布式服务层、应用层

gitblog_00795的博客 57

如何运用领域驱动设计 - 领域服务

概述本文将介绍领域驱动设计(DDD)战术模式中另一个非常重要的概念 - 领域服务。在前面两篇博文中,我们已经学习到了什么是值对象和实体,并且能够比较清晰的定位它们自身的行为。但是在某些时...

dotNET跨平台 270

领域驱动设计(DDD)

基本概念: 1.实体(Entity): 通常实体具备唯一id,能够被持久化,具有业务逻辑,对应现实世界业务对象。 实体一般和主要的业务/领域对象有一个直接的关系。一个实体的基本概念是一个持续抽象的生命,可以变化不同的状态和情形,但总是有相同的标识。 2、值对象(Value Object) 值对象的定义是:描述事物的对象;更准确的说,一个没有概念上标识符描述一个领域方面的对象。这些对象是用来表示临时的事物,或者可以认为值对象是实体的属性,这些属性没有特性标识但同时表达了领域中某类含义的概念。 通常

于小猿的博客 2212

FreeSql扩展功能大全:BaseEntity、JsonMap、LazyLoading等10大实用扩展详解

FreeSql作为一款功能强大的.NET ORM框架,其丰富的扩展功能为开发者提供了极大的便利。本文将详细介绍FreeSql的10大核心扩展功能,帮助你全面提升开发效率!🚀 ## 什么是FreeSql扩展功能? FreeSql扩展功能是在核心ORM功能基础上提供的增强模块,包括BaseEntity基础实体、JsonMap JSON映射、LazyLoading延迟加载等实用工具。这些扩展能够显

gitblog_00799的博客 505

Spring Data JDBC 聚合根实战:从零理解并落地领域驱动设计

很多开发者在用 Spring Data JDBC 时会有同样的困惑:明明数据库里有主子表、有外键,为什么框架非要让我把对象组织成"一棵树",还规定只能从树的顶部去操作?这其实不是什么怪癖,而是 Spring Data Relational(Spring Data JDBC 与 Spring Data R2DBC 的共同母项目)对领域驱动设计(DDD)的一次彻底践行。本文将从一段真实的"坏味道"代码

gitblog_00776的博客 287

从0到1开发领域模型:shriek-fx 中聚合根与值对象的设计与实现

shriek-fx 是一个基于.NET Core 2.0开发的易用型快速开发框架,遵循领域驱动设计(DDD)规范约束,结合CQRS架构提供事件驱动、事件回溯、响应式等基础设施。本文将详细介绍如何在 shriek-fx 中设计和实现聚合根与值对象,帮助开发者轻松构建符合DDD规范的领域模型。 ## 理解聚合根:领域模型的核心 在领域驱动设计中,聚合根是领域模型的核心元素,它负责维护领域对象的一致

gitblog_00483的博客 203

C#怎么实现领域驱动设计 C#如何在ASP.NET Core项目中落地DDD领域驱动设计架构【架构】

DDD要求领域模型类不包含数据库操作,业务逻辑应集中于Entity等类中,数据读写须经应用服务协调仓储,仓储接口仅返回领域对象,避免基础设施泄漏。领域模型类里别直接写数据库操作DDD 的核心是让业务逻辑集中在 Entity、ValueObject、AggregateRoot 这些类里,而不是混进 EF Core 的 DbContext 或仓储实现。一旦你在 Order 类里调用 _context.SaveChanges(),就等于把持久化细节泄漏进领域层,后续换数据库或加事件溯源会非常痛苦。

m0_37761823的博客 249

无保留展示领域驱动设计示例

我以前看过很多IT项目。有的设计得很好,有的设计得很差。基于这些经验,我想写一点关于一个示例项目的内容,我还想展示如何用UML对一个示例项目进行建模,以及如果我们将领域驱动的设计原则应用到模型中会发生什么。 在继续之前,您应该阅读Eric Evans的“域驱动设计”和Vaughn Vernon的“实现域驱动设计”两本书。这个例子大部分都是基于他们的工作,如果你想深入研究领域驱动的设计,他们的书是必读的。 需求 一家公司为其提供车身租赁服务。他们有一些雇员,也有很多自由职业者作为分包商。目前,他们使用E

m0_67645544的博客 511
上一篇: Semaphore并发编程深度解析
下一篇: MyBatis参数绑定技术解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值