【开源系列】三国演义LBS (四)源码:基础框架:验证
前言:
-----------------------------------------------
本随笔介绍了基础框架中的验证框架,包含了串式验证、异常捕捉机制、智能抛异常。
下一篇随笔将介绍基于IL的反射框架,极大提高反射性能。
相关讨论组入口: http://www.pixysoft.net/ (点击进入)
快速入门:
-----------------------------------------------
带跟踪记录的异常捕捉机制
当我们的项目变得庞大,异常有可能会在多个日志被记录,导致了查看日志困难,编写代码的时候又不明确是否需要捕捉这个异常。
因此,我就想,如果这个异常曾经被捕捉过记录了,那么他继续往下抛的时候,能够被识别出来不再记录。于是有了这个跟踪机制:
/// 测试异常捕捉机制
/// </summary>
public void test001()
{
try
{
Method1();
}
catch (Exception ex)
{
if (Exceptions.IsHandled(ex))
return;
//由于异常已经被Method2捕捉,所以外部异常将被忽略 不会处理到此
Console.WriteLine("error here.");
}
}
private void Method1()
{
try
{
hello(null);
}
catch (Exception ex)
{
if (Exceptions.IsHandled(ex))
throw ex;
//由于异常没有被处理过,所以会被记录
Console.WriteLine("write down something in method2");
throw Exceptions.Parse(ex).Handle();
}
}
private void hello(string hello)
{
hello = hello.Trim().ToUpper();
上面的例子,仅仅会输出"write down something in method2" ,而不会有"error here",因为他之间被捕捉过之后,内部设置了时间戳了。
自动对方法参数签名记录的异常抛出机制:
我们很多时候要对输入参数进行验证,如果出现空指针就要抛出(这就是防范式编程的思路) 。但是抛出每次都要写入一大堆的文字说明很麻烦,因此有了以下的机制:
/// 输入参数验证的捕捉
/// </summary>
public void test002()
{
try
{
Method2("aaa", "bbb");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//输出为:
//[Method2] input(s) invalid.
//Pixysoft.Framework.Verifications::Pixysoft.Framework.Verifications.testcase.Method2(String name,String value)
//::String name = aaa;
//::String value = bbb;
}
}
private void Method2(string name, string value)
{
throw Exceptions.VerificationFailedException(name, value);
只要抛出这个异常,就能自动获取抛出的方法名、入口参数等等信息,极大简化代码量。
串式验证机制:
对于入口参数进行验证,代码又多有重复,有人用了什么AOP之类的“重型” 框架,有点得不偿失,因此我参考了别人的设计,得到了以下的代码:
/// 串式验证
/// </summary>
public void test003()
{
Console.WriteLine(
Verification.Verifies(2, 3).IsNotNullOrEmpty().IsGreater(1).IsLess<int>(4).Result());
下期预告:
Pixysoft.Framework.Reflections 反射框架
完全基于IL,模仿微软的Type结构,实现反射功能+AOP功能,极大的提升性能。例如在Java中常见的BeanMap都会出现。敬请留意!
附件下载:
Pixysoft.Framework.Verifications打包下载:
http://www.boxcn.net/shared/5ja9gzysix
SVN同步:
http://qun.qq.com/air/#95755843/share
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?