
dOOv 是一个为 Java 开发人员设计的轻量化库,专注于数据验证和对象间的映射。与传统的验证框架不同,dOOv 通过提供简洁、声明式的 API,使得开发者可以轻松地编写、扩展和维护验证和映射规则。其设计灵感源自领域驱动设计(DDD),非常适合复杂业务场景下的验证需求。本文将通过示例代码、功能列表和用例分析,全面介绍 dOOv 的核心功能。


⭕️宇宙起点
-
- [💯 dOOv 的优势](#💯 dOOv 的优势)
- [💯 dOOv 的基础使用](#💯 dOOv 的基础使用)
-
- [1. 声明式验证](#1. 声明式验证)
- [2. 对象映射](#2. 对象映射)
- [💯 dOOv 高级功能](#💯 dOOv 高级功能)
-
- [1. 复杂验证逻辑](#1. 复杂验证逻辑)
- [2. 自定义验证规则](#2. 自定义验证规则)
- [3. 自定义映射逻辑](#3. 自定义映射逻辑)
- [💯 dOOv 的特性与使用场景](#💯 dOOv 的特性与使用场景)
- [💯 dOOv 的实际应用场景](#💯 dOOv 的实际应用场景)
- [📥 下载地址](#📥 下载地址)
- [💬 结语](#💬 结语)
- [📒 参考文献](#📒 参考文献)

💯 dOOv 的优势
- 声明式验证与映射:通过简洁的 API 构建复杂的验证与映射规则,使代码更易读、易维护。
- 强类型安全:dOOv 使用 Java 泛型确保类型安全,从而减少运行时错误。
- 灵活可扩展:开发者可以通过扩展库内已有功能,自定义规则和映射。
- 适用于复杂业务场景:特别适合金融、保险、电子商务等需要多层次数据验证与对象映射的复杂领域。
- 验证结果报告:生成详尽的验证报告,帮助开发人员快速定位问题。
- 领域驱动设计支持:完美契合基于 DDD 的项目架构,使得业务逻辑与验证规则紧密结合。

💯 dOOv 的基础使用
1. 声明式验证
dOOv 的验证通过流式 API 实现,开发者可以方便地对对象进行属性验证。下面展示一个简单的用户信息验证示例:
java
import static org.dooov.sample.validation.dsl.DSL.*;
public class ValidationExample {
public static void main(String[] args) {
// 验证规则:firstName 不能为空且年龄大于18岁
ValidationRule rule = when(
field(User::getFirstName).notNull()
.and(field(User::getAge).greaterOrEquals(18))
).validate();
User user = new User("John", 20);
// 执行验证
ValidationResult result = rule.executeOn(user);
if (result.isValid()) {
System.out.println("验证通过");
} else {
System.out.println("验证失败: " + result.getFailureCause());
}
}
}
在上述代码中,我们定义了一个 User
类,并为其属性 firstName
和 age
设置验证规则。该验证规则要求 firstName
不能为空,且 age
必须大于等于 18 岁。
2. 对象映射
dOOv 的映射功能让开发者可以轻松实现对象间的属性复制。以下示例展示了如何将一个 User
对象的属性映射到 UserDTO
对象:
java
import static org.dooov.sample.mapping.dsl.DSL.*;
public class MappingExample {
public static void main(String[] args) {
User sourceUser = new User("John", 20);
UserDTO targetDTO = new UserDTO();
MappingRule mappingRule = map(field(User::getFirstName)).to(field(UserDTO::setFirstName))
.and(map(field(User::getAge)).to(field(UserDTO::setAge)));
// 执行映射
mappingRule.executeOn(sourceUser, targetDTO);
System.out.println("DTO 映射结果: " + targetDTO.getFirstName() + ", " + targetDTO.getAge());
}
}
这个映射例子中,我们将 User
对象的 firstName
和 age
映射到目标对象 UserDTO
上。通过 dOOv 的 map()
方法,轻松实现对象间的数据传输。

💯 dOOv 高级功能
1. 复杂验证逻辑
dOOv 支持定义多层次复杂验证逻辑,允许开发者使用逻辑运算符(AND/OR)构建嵌套规则。以下示例展示了如何结合多个条件进行验证:
java
import static org.dooov.sample.validation.dsl.DSL.*;
public class ComplexValidationExample {
public static void main(String[] args) {
ValidationRule complexRule = when(
field(User::getFirstName).notNull()
.and(field(User::getAge).greaterOrEquals(18))
.or(field(User::getEmail).matches("^(.+)@(.+)$")) // 验证邮箱格式
).validate();
User user = new User("John", null, "[email protected]");
ValidationResult result = complexRule.executeOn(user);
if (result.isValid()) {
System.out.println("用户信息验证通过");
} else {
System.out.println("用户信息验证失败: " + result.getFailureCause());
}
}
}
在此示例中,dOOv 结合了 AND/OR 条件,允许用户通过 firstName
和 age
或邮箱格式的验证。
2. 自定义验证规则
dOOv 支持用户根据业务需求自定义验证规则,提供了极大的灵活性。以下是一个创建自定义年龄验证规则的例子:
java
public class CustomValidationRule {
public static ValidationRule isAdult() {
return when(field(User::getAge).greaterOrEquals(18)).validate();
}
public static void main(String[] args) {
User user = new User("Anna", 16);
ValidationRule rule = isAdult();
ValidationResult result = rule.executeOn(user);
if (result.isValid()) {
System.out.println("用户是成年人");
} else {
System.out.println("用户未成年");
}
}
}
这个自定义规则用于验证用户是否成年,开发者可以将其复用于多个场景中,简化代码结构。
3. 自定义映射逻辑
除了默认的映射功能,dOOv 也支持创建自定义的映射逻辑。以下展示如何扩展 dOOv 映射规则:
java
import static org.dooov.sample.mapping.dsl.DSL.*;
public class CustomMappingExample {
public static void main(String[] args) {
User sourceUser = new User("John", "Doe", 25);
UserDTO targetDTO = new UserDTO();
MappingRule customMappingRule = map(field(User::getFirstName)).to(field(UserDTO::setFirstName))
.and(map(field(User::getLastName)).to((source, target) -> {
target.setFullName(source.getFirstName() + " " + source.getLastName());
}))
.and(map(field(User::getAge)).to(field(UserDTO::setAge)));
customMappingRule.executeOn(sourceUser, targetDTO);
System.out.println("映射结果: " + targetDTO.getFullName() + ", 年龄: " + targetDTO.getAge());
}
}
在这个例子中,我们自定义了 LastName
映射逻辑,将 FirstName
和 LastName
组合成 FullName
并赋值给目标对象 UserDTO
。

💯 dOOv 的特性与使用场景
特性 | 描述 | 示例代码 |
---|---|---|
流式 API | 使用流式 API 创建验证和映射规则,代码清晰简洁。 | when(field(User::getFirstName).notNull()) |
验证逻辑 | 定义复杂的验证规则,比如非空、数值范围、字符串长度等。 | field(User::getAge).greaterOrEquals(18) |
对象映射 | 支持对象间的映射,可以轻松地将一个对象的属性复制到另一个对象中。 | map(field(User::getFirstName)).to(field(UserDTO::setFirstName)) |
自定义规则 | 可以根据业务需求,扩展库中的验证和映射规则。 | CustomRule customRule = new CustomRule(); |
强类型安全 | 通过泛型和类型检查,确保在编译时检测到错误,减少运行时异常。 | - |
领域驱动设计支持 | dOOv 基于领域驱动设计的思想,特别适用于复杂的业务场景,比如用户输入验证、订单管理等。 | - |
报告生成 | 生成详细的验证报告,包含失败原因和通过的验证条件。 | ValidationResult result = rule.executeOn(user); |
自定义映射逻辑 | 可以创建自定义映射规则,将多个源对象属性映射到目标对象。 | map((source, target) -> {...}) |

💯 dOOv 的实际应用场景
- 用户输入表单验证:dOOv 可以用来验证前端输入的表单数据,比如用户注册或登录时的基本信息。
- 订单管理系统:在电子商务系统中,可以使用 dOOv 来验证订单的正确性,如订单金额、库存是否充足等。
- 复杂对象映射:适用于 DTO 转换、对象数据迁移等场景,特别是在需要跨系统或数据库进行数据同步时。

📥 下载地址

💬 结语
dOOv 是一个简洁而强大的 Java 数据验证与映射库,提供了流畅的 API 和灵活的扩展性,适合各类业务场景中的数据验证和映射需求。从简单的属性验证到复杂的对象映射,dOOv 都能提供可靠的解决方案。

📒 参考文献
