项目概述
datavalidator 是一个为 Pascal 语言(主要针对 Delphi 和 Free Pascal)设计的轻量级、可扩展的数据验证框架。在处理用户输入、API 响应或配置文件读取时,开发者往往需要编写大量重复的 if-then-else 逻辑来检查数据的合法性。
该项目旨在将验证逻辑与业务逻辑解耦,通过定义一套声明式的验证规则,让开发者能够以极简的代码实现复杂的数据校验,从而提高代码的可维护性和鲁棒性。
核心设计理念
1. 声明式验证
不再编写冗长的嵌套判断,而是通过配置验证器(Validator)来定义数据必须满足的条件。
2. 职责分离
验证逻辑被封装在独立的验证类中,业务代码只需调用验证接口并处理结果,无需关心具体的校验算法。
3. 高可扩展性
项目采用了灵活的架构,允许开发者轻松继承基类,创建自定义的验证规则(如:正则校验、数据库唯一性校验、业务逻辑交叉校验等)。
核心功能特性
- 多类型支持:支持对字符串、整数、浮点数以及自定义对象进行验证。
- 链式校验:支持将多个验证规则组合在一起,只有全部通过才视为合法。
- 详细的错误反馈:不仅返回布尔值,还能提供具体的错误消息,方便直接反馈给前端用户。
- 轻量级依赖:无冗余依赖,易于集成到现有的 Delphi 或 Lazarus 项目中。
快速上手实例
为了更好地理解 datavalidator 的工作方式,我们通过一个典型的“用户注册表单”场景来演示。
场景:验证用户注册信息
我们需要验证以下字段: - 用户名:必填,长度在 3-20 字符之间。 - 邮箱:必须符合电子邮件格式。 - 年龄:必须在 18-100 岁之间。
代码实现
pascal
uses
DataValidator.Core,
DataValidator.CommonRules; // 假设的规则库
procedure ValidateUserRegistration;
var
Validator: TDataValidator;
UserAge: Integer;
UserName: string;
UserEmail: string;
Result: TValidationResult;
begin
// 模拟输入数据
UserName := 'DevUser';
UserEmail := 'invalid-email@'; // 故意写错
UserAge := 15; // 低于18岁
// 1. 初始化验证器
Validator := TDataValidator.Create;
try
// 2. 定义验证规则
// 验证用户名:非空且长度在3-20之间
Validator.AddRule('UserName', [
TRuleRequired.Create('用户名不能为空'),
TRuleLength.Create(3, 20, '用户名长度必须在3到20个字符之间')
]);
// 验证邮箱:必须符合Email格式
Validator.AddRule('Email', [
TRuleEmail.Create('请输入有效的电子邮件地址')
]);
// 验证年龄:范围在18-100
Validator.AddRule('Age', [
TRuleRange.Create(18, 100, '年龄必须在18至100岁之间')
]);
// 3. 执行验证
// 将数据放入映射表进行校验
Validator.ValidateValue('UserName', UserName);
Validator.ValidateValue('Email', UserEmail);
Validator.ValidateValue('Age', UserAge);
// 4. 处理结果
if Validator.IsValid then
begin
Writeln('验证通过,可以提交数据!');
end
else
begin
Writeln('验证失败,请检查以下错误:');
// 遍历所有错误信息
for each Error in Validator.Errors do
begin
Writeln(Format('[%s]: %s', [Error.Field, Error.Message]));
end;
end;
finally
Validator.Free;
end;
end;
进阶:创建自定义验证器
如果你需要一个特殊的验证逻辑(例如:验证密码是否包含特殊字符),你可以轻松继承 TBaseRule。
pascal
type
TRulePasswordComplexity = class(TBaseRule)
protected
function Validate(Value: TValue): Boolean; override;
end;
function TRulePasswordComplexity.Validate(Value: TValue): Boolean;
begin
// 实现复杂的正则表达式或字符检查逻辑
Result := Value.AsString.ContainsAny(['!', '@', '#', '$', '%']);
end;
// 使用方式
Validator.AddRule('Password', [
TRulePasswordComplexity.Create('密码必须包含至少一个特殊字符')
]);
为什么选择 datavalidator 而不是手动编写 if 语句?
| 维度 | 手动编写 if 校验 |
使用 datavalidator |
|---|---|---|
| 代码量 | 随着字段增加,代码呈线性爆炸 | 规则定义简洁,结构统一 |
| 可维护性 | 修改一个规则需要翻找大量逻辑块 | 在规则配置处一键修改 |
| 复用性 | 校验逻辑散落在各处,难以复用 | 验证类可跨模块、跨项目复用 |
| 用户体验 | 往往只能返回第一个错误 | 可一次性收集所有错误并统一反馈 |
| 测试难度 | 需要编写大量分支测试用例 | 可针对单个 Rule 进行单元测试 |
安装与集成
- 克隆仓库:
text
git clone https://github.com/dliocode/datavalidator.git
- 添加路径:将项目中的
src文件夹添加到你的 Delphi 搜索路径(Search Path)中。 - 引入单元:在代码中使用
uses关键字引入核心单元即可开始使用。
总结
datavalidator 为 Pascal 开发者提供了一种现代化的数据校验方案。它将枯燥的边界检查转化为可配置的规则集,极大地提升了代码的整洁度。无论你是正在开发一个复杂的桌面管理系统,还是一个轻量级的后端服务,该项目都能帮助你快速构建起一道坚实的数据安全防线。
datavalidator_20260209173222.zip
类型:压缩文件|已下载:1|下载方式:免费下载
立即下载



还没有评论,来说两句吧...