动态配置的 Schedule 设计

2021-10-12
阅读 10 分钟
2.5k
定时任务是实际开发中常见的一类功能,例如每天早上凌晨对前一天的注册用户数量、渠道来源进行统计,并以邮件报表的方式发送给相关人员。相信这样的需求,每个开发伙伴都处理过。

应用服务 和 模板方法 擦出的火花

2021-09-19
阅读 27 分钟
1.6k
0. 前言面对业务,一个永恒的真理:永远不变的就是变化。如何发现变化、封装变化、隔离变化,是每个 程序员 的永恒话题。本篇文章,将带领大家把 “模板方法” 设计模式应用于领域设计的 “应用服务” 中,以达到如下目的:对主流程进行封装,保持主流程的稳定性,不变性;对细节步骤进行扩展,保持业务的灵活性,扩展性;在...
封面图

架构设计--配置信息管理

2021-09-15
阅读 2 分钟
1.7k
0. 配置信息配置信息特指程序启动时对程序进行配置的信息,常见的如服务端口、数据库连接信息、线程池信息等。在系统启动时,程序会通过不同的配置方案,主动获取配置信息,以完成系统的初始化工作。因此,配置信息的管理是一件非常重要的事情。您的配置信息是怎么管理的呢?让我们一起见证下配置信息管理的不同方案。1....
封面图

基于 Java 线程栈的问题排查

2020-04-23
阅读 10 分钟
2.6k
除日志外,还有没有别的方式跟踪线上服务问题呢?或者,跟踪并排除日志里无法发现的问题? 方法当然是有的,就是通过现场快照定位并发现问题。我们所说的现场,主要指这两方面: Java 线程栈。线程栈是Java线程工作的快照,可以获得当前线程在做什么; Java 内存堆。堆是JVM的内存快照,可以获取内存分配相关信息。 今天...

Java 异常处理

2020-02-22
阅读 17 分钟
3.5k
如果不使用异常,那么就必须在调用点检查特定的错误,并在程序的很多地方去处理它;如果使用异常,那么就不必在方法调用处进行检查,因为异常机制将保证能够捕获这个错误。因此只需要在一个地方处理错误,这种方式不仅节省代码,而且把“描述正确执行过程做什么事”和“出了问题怎么办”相分离。

架构设计--配置信息管理

2019-09-24
阅读 3 分钟
2.4k
0. 配置信息 配置信息特指程序启动时对程序进行配置的信息,常见的如服务端口、数据库连接信息、线程池信息等。 在系统启动时,程序会通过不同的配置方案,主动获取配置信息,以完成系统的初始化工作。 因此,配置信息的管理是一件非常重要的事情。 您的配置信息是怎么管理的呢?让我们一起见证下配置信息管理的不同方案...

架构设计--互联网架构演化

2019-09-02
阅读 5 分钟
3.5k
对于一个大型网站,主要有以下几个特征: 支撑海量数据 非常高的访问量 我们常见的大型网站,如百度、淘宝、京东等,都是一个分布式系统。这么复杂的系统也不是一天建成的,每个系统都经历了漫长的演变过程。 架构演变 在大型网站中,其最核心的功能就是 计算 和 存储。因此系统演变过程也主要围绕这两点进行。 1 单机系...

领域驱动设计战术模式--领域事件

2019-04-16
阅读 17 分钟
5.6k
领域驱动实践者发现他们可以通过了解更多发生在问题域中的事件,来更好的理解问题域。这些事件,就是领域事件,主要是与领域专家一起进行知识提炼环节中获得。

战术模式--领域服务

2019-04-09
阅读 16 分钟
1.8k
模型中的领域服务表示一个无状态的操作,他用于实现特定于某个领域的任务。当领域中某个操作过程或转化过程不是实体或值对象的职责时,我们便应该将该操作放在一个单独的元素中,即领域服务。同时务必保持该领域服务与通用语言是一致的,并且保证它是无状态的。

领域驱动设计战术篇--实体

2019-04-01
阅读 32 分钟
2.6k
实体是具有唯一标识的概念,找到领域中的实体并对其进行建模是非常重要的环节。如果理解一个概念是一个实体,就应该追问领域专家相关的细节,比如概念生命周期、核心数据、具体操作、不变规则等;从技术上来说,我们可以应用实体相关模式和实践。

领域驱动设计战术模式---值对象

2019-03-25
阅读 18 分钟
4.3k
一个值对象,或者更简单的说,值,是对一个不变的概念整体建立的模型。在这个模型中,值就真的只有一个值。和实体不一样,他没有唯一标识,而是通过封装属性的对比来决定相等性。一个值对象不是事物,而是用来描述、量化或测量实体的。

领域驱动设计--战术模式简介

2019-03-21
阅读 3 分钟
2.9k
战术模式严重依赖于领域模型和通用语言,通过技术模式将领域模型和通用语言中的概念映射到代码实现中。随着模型的进化,代码实现也会进行重构,以更好的体现模型概念。当然,从技术重构角度也会发现一些隐含领域知识(概念),这些新的发现也会对领域模型产生影响。

ddd-lite-codegen 样板代码终结者

2019-03-11
阅读 29 分钟
3.5k
框架提供若干注解和注解处理器,在编译阶段,自动生成所需的 Base 类。这些 Base 类随着领域对象的重构而变化,从而大大减少样板代码。如有特殊需求,可以通过子类进行扩展,而无需修改 Base 类的内容(每次编译,Base 类都会自动生成)。

领域驱动设计,构建简单的新闻系统,20分钟够吗?

2019-02-22
阅读 22 分钟
4.3k
让我们使用领域驱动的方式,构建一个简单的系统。 1. 需求 新闻系统的需求如下: 创建新闻类别; 修改新闻类别,只能更改名称; 禁用新闻类别,禁用后的类别不能添加新闻; 启用新闻类别; 根据类别id获取类别信息; 指定新闻类别id,创建新闻; 更改新闻信息,只能更改标题和内容; 禁用新闻; 启用新闻; 分页查找给定...

Java高级程序员必备:反射、动态代理

2018-08-22
阅读 28 分钟
8.9k
获取Java类型系统,主要有两个方式:一种是传统的RTTI(Run-Time Type Identification),它假定我们在编译时已经知道了所有的类型信息;另一种是反射(Reflect),它允许我们在程序运行时获取并使用类型信息。