- 博客(198)
- 资源 (44)
- 收藏
- 关注
原创 references.md
Eric Evans:DDD Reference(官方页面)Eric Evans:DDD Reference PDF(2015-03 版常见下载地址)Vlad Khononov:Learning Domain-Driven Design(战略设计与现代实践入门)
2026-01-03 09:25:29
337
原创 16-现代架构扩展-DDD领域驱动设计
- 理解 CQRS(Command Query Responsibility Segregation)的核心思想:**读写分离**- 理解 Event Sourcing(事件溯源)的核心思想:**用事件流表示状态**- 理解 Saga/Process Manager 的核心思想:**跨聚合/跨 BC 的流程编排**- **重点**:掌握“何时用/何时不用”,避免过度设计
2026-01-03 09:24:37
851
原创 15-上下文映射-DDD领域驱动设计
- 理解上下文映射的目的:**描述 BC 之间的关系,指导集成策略与团队协作**- 能识别并应用 9 种上下文映射模式:Partnership、Shared Kernel、Customer-Supplier、Conformist、ACL、OHS、PL、Separate Ways、Big Ball of Mud- 能根据“团队关系、模型质量、集成需求”选择合适的映射模式
2026-01-03 09:23:55
836
原创 14-有界上下文-DDD领域驱动设计
- 理解有界上下文(Bounded Context)的定义:**一个显式的边界,在这个边界内,领域模型的所有术语和概念都有明确的含义**- 能识别 BC 边界:通过“术语冲突/模型差异/团队边界”来识别- 能用 BC Canvas 工具来设计并文档化一个 BC
2026-01-03 09:23:15
819
原创 13-子域与核心域-DDD领域驱动设计
- 理解子域(Subdomain)的概念:把大领域拆成更小的、可独立理解的业务区域- 能区分三类子域:**核心域(Core Domain)/ 支撑域(Supporting Subdomain)/ 通用域(Generic Subdomain)**- 能根据“业务价值与差异化能力”识别核心域,并制定投资策略
2026-01-03 09:22:26
235
原创 12-深层模型与重构-DDD领域驱动设计
- 理解“浅层模型 vs 深层模型”的区别:浅层是“数据结构+CRUD”,深层是“业务概念+规则”- 能识别“隐含概念(Implicit Concept)”,并通过重构显性化- 掌握从浅层模型到深层模型的演进路径:识别 → 提取 → 重构 → 验证
2026-01-03 09:21:43
804
原创 11-测试驱动的领域建模-DDD领域驱动设计
- 理解测试驱动开发(TDD)如何帮助发现更好的领域模型- 能区分“领域层测试 / 应用层测试 / 基础设施层测试”的关注点- 能用测试表达业务规则,让测试成为“可执行的领域文档”
2026-01-03 09:20:30
398
原创 10-应用服务与用例编排-DDD领域驱动设计
- 理解应用服务(Application Service)的核心职责:**用例编排 + 事务边界 + 协调端口**- 能把“业务规则”与“用例流程”拆开:规则在领域层,流程在应用层- 能用订单域示例说明:加载聚合 → 执行业务行为 → 保存 → 发布事件 的标准用例骨架
2026-01-03 09:18:56
386
原创 09-领域事件与可靠发布-DDD领域驱动设计
- 理解领域事件(Domain Event)是什么:**领域中发生的、对业务有意义且值得被其他部分知道的事实**- 能把“事件建模(命名/载荷/边界)”与“发布可靠性(Outbox/幂等/去重)”区分开- 能解释为什么“发布事件”更适合放在应用层编排,而不是在聚合内直接发 MQ
2026-01-03 09:17:49
384
原创 08-仓储与映射-DDD领域驱动设计
- 理解仓储(Repository)的本质:**用“集合式接口”表达聚合的持久化**,隐藏数据访问细节- 能解释“仓储接口在领域层、实现放基础设施层”的原因(依赖规则 + 可测试性)- 能识别“查询/读模型”与“聚合仓储”应当分离的场景(避免仓储膨胀)
2026-01-02 19:30:04
273
原创 07-服务与规约-DDD领域驱动设计
- 能区分三类“服务”:**领域服务 / 应用服务 / 基础设施服务** 的职责边界- 理解规约(Specification)如何把业务规则“显性化”,并在校验与组合中复用- 能把业务逻辑放回正确位置:优先聚合根,其次值对象/规约,最后才是服务
2026-01-02 19:29:10
609
原创 06-聚合与一致性边界-DDD领域驱动设计
- 理解聚合(Aggregate)的目的:**用边界控制一致性**,降低模型耦合与并发冲突- 能区分“聚合根(Aggregate Root)”与聚合内部对象,并落实到访问规则- 能用 Vaughn Vernon 的聚合设计原则解释:为什么“跨聚合强一致”往往是坏主意- 能把“事务边界、并发、领域事件”与聚合边界串成一个完整的设计理由链
2026-01-02 19:28:12
899
原创 05-值对象与不变量-DDD领域驱动设计
- 理解值对象(Value Object)的定义:**无标识、以值区分、通常不可变**- 能把关键业务约束写进值对象,使“不变量(Invariant)”在模型层被持续守护- 能识别“把 String/BigDecimal 直接塞进模型”带来的隐性复杂度
2026-01-02 19:26:51
887
原创 04-实体与标识-DDD领域驱动设计
- 理解实体(Entity)的定义:**以标识(Identity)区分**,而不是以属性值区分- 能在“实体 vs 值对象(Value Object)”之间做出建模选择,并说清理由- 能把“标识、生命周期、相等性(Equality)”这三件事落实到代码与讨论中
2026-01-02 19:25:55
569
原创 03-分层与依赖规则-DDD领域驱动设计
- 理解分层架构的目的:隔离变化、降低耦合、让领域模型保持表达力- 能区分“领域层/应用层/基础设施层/接口层”的职责- 能用 Ports & Adapters(六边形架构)解释“端口/适配器”的意义
2026-01-02 19:24:54
908
原创 02-通用语言与协作-DDD领域驱动设计
- 理解通用语言(Ubiquitous Language)的作用:消除“人脑翻译”- 能建立最小可用的词汇表,并把它映射到代码命名- 知道如何在模型演化时同步更新语言与代码
2026-01-02 19:23:32
390
原创 01-领域与问题空间-DDD领域驱动设计
- 能用自己的话解释:什么是领域(Domain),什么是模型(Model)- 理解“问题空间(Problem Space)”与“解空间(Solution Space)”的区别- 能把一段业务叙事提炼成:关键概念、关键规则、关键流程
2026-01-02 19:21:50
313
原创 00-导读-DDD领域驱动设计
本文介绍了DDD(领域驱动设计)教材的学习框架与方法。教材针对团队常见问题:领域模型混乱、业务规则分散、代码与业务脱节等,提出系统化解决方案。学习路径分为事件风暴、通用语言、战术建模、战略设计和模型演化五个环节,强调通过"白板产物+文字说明"交付作业。教材统一伪代码规范(如领域事件用过去式、命令用祈使式),并针对不同基础学员提供分层学习建议。核心目标是帮助学员掌握用"通用语言+边界+模式"讨论系统的能力,实现设计与代码的统一。
2026-01-02 19:19:40
355
原创 用户文件系统设计思考
本文介绍了一个多层BFF架构的系统设计方案。系统采用领域驱动设计思想,将后端划分为文件业务系统、用户业务系统和全局聚合层三个核心模块。架构特点包括: 分层设计:每个领域拆分为业务层(HTTP接口)和基础服务层(RPC能力),实现关注点分离 调用规范:业务层只能调用基础服务层,禁止跨业务层直接调用 跨域处理:全局聚合层专门负责跨领域业务编排 前端接入:根据场景选择调用聚合层或特定领域业务层 该架构通过明确的分层和调用约束,实现了领域内高内聚、跨域低耦合的设计目标,同时保证了系统的可维护性和扩展性。
2025-12-23 20:36:22
902
原创 HttpClient连接池管理
@Configuration@EnableConfigurationProperties(HttpClientProperties.class)@ConditionalOnProperty(prefix = "myserver.httpclient", value = "enabled", havingValue = "true")public class HttpClientConfig { @Autowired HttpClientProperties httpClientPro
2021-12-20 22:01:20
1167
原创 docker启动elasticsearch问题
问题1:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]答:在宿主机上修改echo "vm.max_map_count=262144" >> /etc/sysctl.confsysctl -w vm.max_map_count=262144https://www.elastic.co/guide/en/elasticsearch/reference/5
2021-10-20 12:50:30
679
1
原创 docker 容器的生命周期
1、检查本地是否存在镜像, 如果不存在即从远端仓库检索2、利用镜像启动容器3、分配一个文件系统,并在只读的镜像层外挂载一层可读写层4、从宿主机配置的网桥接口中桥接一个虚拟接口到容器5、从地址池配置一个ip地址给容器6、执行用户指定的指令7、执行完毕后容器终止...
2021-06-03 09:36:12
372
原创 docker swarm
修改主机名称#修改主机名称hostname # 主机名称hostnamectl set-hostname node1关闭防火墙#关闭防火墙systemctl stop firewalld && systemctl disable firewalldinit swarm#init swarmdocker swarm init创建网络#创建网络docker network create -d overlay mynetdocker ui界面# docker u
2021-06-02 21:46:31
314
原创 docker stack
使用现有网络version: "3.9"services: nginx1: image: zhaokuner/nginx ports: - "91:80" networks: - devopsnet nginx2: image: zhaokuner/nginx ports: - "92:80" networks: - devopsnetnetworks: devopsnet: ext
2021-06-02 21:41:41
152
原创 docker-machine
安装curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machinewget h
2021-06-02 21:41:09
149
原创 Dockerfile
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。注: 本文中大部分来自《Docker从入门到实践》如有难懂的地方请移驾原书地址Dockerfile的规则格式#为注释指令(大写)内容(小写)尽管指令是大小写不敏感的,但是,我们强烈建议指令用大写,内容用小写表示Docker是按顺序执行Dockerfile里的指令集合的(从上到下依次执行)每一个Dockerfile的第一 个非注释行
2021-06-02 21:39:54
286
原创 Harbor仓库搭建
官方安装指南软件准备1、docker2、Docker Compose3、sudo yum install Opensslcp docker-compose-`uname -s`-`uname -m` /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-composeharbor需要https访问,因为是自己生成证书的问题,CA不认可vim /etc/docker/daemon.json # 初始化配置{
2021-06-02 21:19:31
156
原创 docker swarm Label
添加标签docker node update --label-add role=masl manager-node查看标签docker node update --label-rm role manager-node删除标签docker node update --label-rm role manager-node服务部署条件约束docker service create \--name masl \-e TZ="Asia/Shanghai" \--network mrp_net
2021-06-02 21:18:21
547
1
原创 docker nginx
DockerfileFROM centos:7MAINTAINER zhaoxkRUN yum -y install wget && yum clean all && \ mkdir -p /etc/yum.repos.d/bak/ && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ && \ wget -O /etc/yum.repos.d/CentOS-Base.re
2021-06-02 21:13:34
151
原创 docker 安装
《Docker从入门到实践》https://www.yuque.com/grep/kubernetes关闭Swap分区swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstabvim /etc/fstab# 注释掉#/dev/mapper/centos-swap swap swap defaults 0 0#重启reboot#查询状态free -m
2021-06-02 21:10:52
949
原创 docker镜像管理
#登录docker login docker.io/root/.docker/config.json # 密码位置echo emhhb2t1bmVyOjE5ODUxMDF6eGs= | base64 -d# 搜索镜像alpinedocker search alpine#下载镜像 官方可以省去路径和tagdocker pull centosdocker pull centos:7#查看本地镜像docker imagesdocker image ls#打tag#IMAGE.
2021-06-02 21:04:21
132
原创 docker容器的基本操作
查看所有容器docker ps -a #-a全部 默认 查询存活启动容器(运行镜像)docker run是日常用的最频繁用的命令之一,同样也是较为复杂的命令之一 命令格式: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS :选项 -i:表示启动-一个可交互的容器, 并持续打开标准输入 -t:表示使用终端关联到容器的标准输入输出上-d :表示将容器放置后台运行 --rm:退出后即删除容器 --name :表示定义容器唯一名称
2021-06-02 21:02:02
432
转载 Docker Swarm 入门:Service 存储
► 前言介绍为了获得最佳的性能和可移植性,应该避免将重要数据直接写入容器的可写层,而应使用数据卷或绑定挂载。这个原则也适用于服务。可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bind mounts)。无论使用哪种类型的挂载,在创建服务时使用 --mount 标志进行配置,或者在更新服务时使用 --mount-add 或 --mount-rm 标志。如果不指定一个类型,默认类型是数据卷挂载。tmpfs mount 仅可用于独立容器,不能在 .
2021-04-25 21:05:07
400
转载 MySQL索引类型详解
索引的类型和存储引擎有关,每种存储引擎所支持的索引类型不一定完全相同。MySQL 索引可以从存储方式、逻辑角度和实际使用的角度来进行分类。存储方式区分根据存储方式的不同,MySQL 中常用的索引在物理上分为 B-树索引和 HASH 索引两类,两种不同类型的索引各有其不同的适用范围。1) B-树索引B-树索引又称为BTREE 索引,目前大部分的索引都是采用 B-树索引来存储的。B-树索引是一个典型的数据结构,其包含的组件主要有以下几个:叶子节点:包含的条目直接指向表里的数据行。叶子节..
2021-04-22 18:12:05
240
转载 ServiceMesh
今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础。作为架构师,如果你现在还不了解ServiceMesh的话,是否感觉有点落伍了?那么到底什么是ServiceMesh?它诞生的背景是什么?它解决什么问题?企业是否适合引入ServiceMesh?根据近年在一线互联网企业的实践和思考,从个人视角出发,我为大家一一解答这些问题。微服务架构的核心技术问题在业务规模化和研发效能提升等因素的驱动
2021-04-16 10:04:49
215
原创 K8S简介
k8s的前世今生k8s = kubernetesi18n = internationalization云服务Infrastructure As a Service(iaas):基础设施即服务,典型厂商《阿里云》《AWS》。Platform As a Service(paas):平台即服务,典型厂商《新浪云》。Software As a Service(saas):软件设施及服务,典型厂商《office365》。PAAS是一套可以直接提供出来的运行环境最初 服务器(+虚拟机):手
2021-04-02 16:35:00
10453
3
原创 RabbitMQ 简介
2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0发布。RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。AMQPAMQP,即advanced Message Queuing Protocol (高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端\中间件不同产品,不同的开发语言等条件的限制
2021-03-25 19:28:20
476
1
原创 线程池配置
线程参数public class MyAsyncProperties { private Integer corePoolSize = 10; private Integer maxPoolSize = 300; private Integer queueCapacity = 20; private Integer keepAliveSeconds = 60; private String threadNamePrefix = "MyTaskExecutor-";
2021-03-04 18:37:28
553
1
转载 ElasticSearch——路由(_routing)机制
前言一条数据是如何落地到对应的shard上的?当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个算法决定的:shard_num = hash(_routing) % num_primary_shards其中_routing是一个可变值,默认是文档的_id的值 ,也可以设置成一个自定义的值。 _rout...
2021-01-15 19:13:24
1568
转载 spring boot 过滤器、拦截器的区别与使用
拦截器与过滤器的区别:1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。如下图:2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。过滤器拦截器运行先后步骤:
2020-12-25 19:51:19
203
tomcat_jndi_hibernate.txt
2009-03-07
集体智慧编程中文版.pdf
2018-05-03
推荐系统实践(中文版).pdf
2018-05-03
微服务设计 pdf
2018-05-03
peopleware 中文版 第三版
2018-05-03
统计学习方法.pdf
2018-05-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅