本文作者:icy

Pascal DataValidator:构建健壮的 Delphi/Pascal 数据验证体系

icy 昨天 28 抢沙发
Pascal DataValidator:构建健壮的 Delphi/Pascal 数据验证体系摘要: 项目概述 datavalidator 是一个为 Pascal 语言(主要针对 Delphi 和 Free Pascal)设计的轻量级、可扩展的数据验证框架。在处理用户输入、API...

Pascal DataValidator:构建健壮的 Delphi/Pascal 数据验证体系

项目概述

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 进行单元测试

安装与集成

  1. 克隆仓库
    text
    git clone https://github.com/dliocode/datavalidator.git
    
  2. 添加路径:将项目中的 src 文件夹添加到你的 Delphi 搜索路径(Search Path)中。
  3. 引入单元:在代码中使用 uses 关键字引入核心单元即可开始使用。

总结

datavalidator 为 Pascal 开发者提供了一种现代化的数据校验方案。它将枯燥的边界检查转化为可配置的规则集,极大地提升了代码的整洁度。无论你是正在开发一个复杂的桌面管理系统,还是一个轻量级的后端服务,该项目都能帮助你快速构建起一道坚实的数据安全防线。

datavalidator_20260209173222.zip
类型:压缩文件|已下载:1|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://zelig.cn/delphi/843.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,28人围观)参与讨论

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