zoukankan      html  css  js  c++  java
  • 实现一个对象验证库系列 (请大神批评) -- 0) 目录以及库结构介绍

    缘由

    写该系列缘由是因为之前在国庆无聊实现了一个对象验证的小库,

    并希望博客园内的大神能批评教育一下我的这个库,让我能成长一些。

    但是估计由于我没有介绍库的内容以及我的思路,只是给出了代码,

    大神们对此没太大的兴趣,

    所以最近开始我会写一个几篇简单介绍性文章的系列来阐述该库的内容。

    希望有幸能被大神们看见并给予我一些批评。

    系列目录

    0) 目录以及库结构介绍

    1) 接口介绍以及总体思路概述

    2) 验证器实现

    3) Fluent以及扩展方法实现

    本片正文 :库结构介绍

    (0)库介绍

    本人是设想库的使用者可以用 Fluent 的方式创建对象的验证规则,

    并且库由于不太涉及.net不同设备平台的特有代码,所以我是使用Portable 方式编写该库。

    设想的库使用方式代码如下:

    Container.Init(); // Only need init in your app once,目的是绑定类型与接口
    
    var builder = Validation.NewValidatorBuilder<Student>();  // 创建验证创建者
    
    b.RuleFor(i => i.Age)
    		.Must(i => i >= 0 && i <= 18)
    		.OverrideName("student age")
    		.OverrideError("not student")
    	.ThenRuleFor(i => i.Name)
    		.Must(i => !string.IsNullOrWhiteSpace(i))
    		.OverrideName("student name")
    		.OverrideError("no name");
    // 设置验证规则		
    
    var v = builder.Build();  // 利用创建者创建验证器
    
    var student = new Student() { Age = 13, Name = "v" }; // 验证对象数据
    
    var context = Validation.CreateContext(student); // 创建验证上下文,因为上下文中有执行相关的参数
    
    var result = v.Validate(context); // 使用验证器验证student数据
    
    Assert.IsNotNull(result);
    Assert.True(result.IsValid);
    Assert.True(result.Failures.Count == 0);  // 验证结果的对比测试
    

    (1)库代码结构介绍

     项目结构如下图:

    UnitTest :单元测试代码 (这个不用介绍了吧)

    ObjectValidater :库只有这一个项目

    • Base : 验证规则,规则创建者,规则选择器,验证器等实际实现代码
    • Checkers :各种验证方式的具体实现
    • Common :与库业务定义或者逻辑无关,提供便利地公用扩展方法或者类的实现
    • Entities :验证上下文,验证结果定义
    • Interfaces :各种接口的定义
    • Container 类:用于接口与实现类型绑定的解耦设置静态类
    • Syntax 类:提供Fluent使用方式的扩展方法定义
    • Validation 类:因为想将接口与实际实现解耦,所以不便于让用户自行 new 对象,只能提供创建的静态类

    (2)项目依赖

    目前该库只有一个依赖 Autofac,由于解耦接口和具体实现:

      <package id="Autofac" version="3.5.2" targetFramework="portable-net40+sl50+win80+wp80+wpa81" />
    

    NEXT: 1) 接口介绍以及总体思路概述

  • 相关阅读:
    oracle proc 插入操作性能优化实践
    vmware 虚拟机共享文件夹无法显示问题解决
    oracle启动报错:ORA-03113
    c语言中sprintf()函数中的%使用
    c 的内存分配
    c实现队列
    c实现循环链表
    MantisBT导出Excel文件名显示中文的修改方法
    怎样通过Qt编写C/C++代码查询当前Linux的版本号?
    Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版
  • 原文地址:https://www.cnblogs.com/fs7744/p/4892126.html
Copyright © 2011-2022 走看看