zoukankan      html  css  js  c++  java
  • [项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库

    在日常开发的过程当中我们总是会根据项目的开发需求将一些公用的类或者方法进行抽象封装,这些类或方法的抽象封装可能是基于某个项目或者多个项目,最常见的应该就是SQLHelper了,这些类库在实际使用的过程当中会为我们项目的开发提供很大的帮助,大大简化了实际开发的难度及进度(这个其实谁都知道),本篇文章主要是针对我今年来一直在完善的公司的工具类库的写的一些心得,可能许多朋友也都有类似的类库,也欢迎大家交流。

    以下是本文所要介绍的内容:

    1、为什么要有工具类库?

    2、个人认为的工具类库的一些编写规则

    3、我的工具类库有哪些东西?

    一、为什么要有工具类库?

         这个在文章开头也说了,工具类库纯粹就是为了对一些公用或者会重复使用的代码进行封装,以达到通用的目的,一般只要结构合理的项目都会有个一个类似的类库,主要负责就是为本项目的其他模块提供服务,封装了许多常用或重复的方法。就拿SQLHelper来举例,SQLHelper主要针对SQLServer数据库操作进行一些通用的封装,就比如如下代码:

    01 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    02         {
    03             SqlCommand cmd = new SqlCommand();
    04   
    05             using (SqlConnection connection = new SqlConnection(connectionString))
    06             {
    07                 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
    08                 object val = cmd.ExecuteScalar();
    09                 cmd.Parameters.Clear();
    10                 return val;
    11             }
    12         }

    这是一个很简单的ExecuteScalar封装,将相应的创建SqlCommand并赋值处理等操作都封装在其中,用户使用的时候只需一个简单的调用既可,如下代码:

    1 SqlHelper.ExecuteScalar(SqlHelper.ConnectionString, CommandType.Text, INSERT_NEWSLOG, para)

    既简单又高效,而且因为都将重复的代码封装在了一起,所以相对的出现错误的概率也小,就算出现了也可以有针对性的去寻找错误。

    同时随着.NET版本的不断提升,.NET增加了许多的语法糖,为实际的开发又做出了很大的贡献,比如:扩展方法,原来我们创建通用方法的时候都是创建一个个静态方法,这样虽然是封装了,但是在实际的调用过程中还是有那么点令人不爽,总是需要敲击XXXHelper.XXX()这种类似的方法,其实像XXXHelper完全是可以省略掉的,所以有了扩展方法的出现,无形中可以减少掉许多敲击键盘的时间,如下的代码:

    01 /// <summary>
    02 /// 将指定的值转换为有符号整数,
    03 /// </summary>
    04 /// <param name="str">指定字符串</param>
    05 /// <param name="defValue">缺省值</param>
    06 /// <returns></returns>
    07 public static int ToInt(this string str, int defValue)
    08 {
    09     if (string.IsNullOrEmpty(str) || str.Trim().Length >= 11 || 
    10         !Regex.IsMatch(str.Trim(), @"^([-]|[0-9])[0-9]*(\.\w*)?$"))
    11         return defValue;
    12   
    13     int rv;
    14     if (Int32.TryParse(str, out rv))
    15         return rv;
    16   
    17     return Convert.ToInt32(ToFloat(str, defValue));
    18 }

    这是一个为string类型添加的一个ToInt扩展方法,通过这个方法我们可以从原来的Convert.ToInt方法给解放出来,只需在字符串类型后敲击ToInt()既可完成类型的转换。当然这种扩展或者封装在实际过程中还有许多许多,这边就不列举了。

    由此可见适当的封装可以大大简化我们实际的开发,而工具类库就是将这些封装集合在一起,将各种封装打包在一起以供开发者快速的上手使用。

    二、个人认为的工具类库的一些编写规则

          工具类库我想很多朋友其实都有,而且都维护了很多年,我以前的做法也都是为每个项目建立一个公用类库,但是后来看到以前的老工程师把他自己维护多年的工具类库给我们使用的时候,这时候觉得这种工具类库更加方便,不必随着项目而走,完全独立,仅对通用的功能进行封装,不参与任何业务逻辑的封装。

    以下就是我认为的工具类库的一些编写规则(仅供参考):

    1、仅对通用的功能进行封装,不参与任何业务逻辑的封装,由于工具类库是完全独立于项目的,其自身有专门的工程来维护,所以不应该对个别项目进行特殊对待,特殊封装(这样就是不是通用的工具类库了),当然你可以为需要特殊封装的项目再建立一个独立的类库进行分装,而这个类库仅仅是针对这个项目的。

    2、细化开发过程中常见的功能并予以划分类,既然是工具类库就肯定包含许多的类,每个类应该有自己针对的领域或方向,就比如上面的SQLHelper就是仅针对SQLServer数据库操作的。所以可以结合实际开发需求划分,比如:FileHelper,ImageHelper,WebHelper等。

    3、随着开发过程中需求不断完善,工具类库里的那些帮助类需要不断的完善,这个需要时间的积累,结合项目所用到的需求来封装,比如项目今天需要用到缩略图生成了,则可以分析缩略图生成的逻辑来编写代码,当然也可以自己列个表将自己平时会用到的一些通用方法列出来,然后自己写或者网上搜都是可以,不过最重要的是一定要做好测试,否则在实际使用过程中会很痛苦

    4、随着.NET版本不断完善,随着.NET版本的不断提升,.NET自身会增加许多新的特性,而这些特性都是可以用来简化目前的开发代码的。

    5、完善的注释,这点我认为很重要,因为这个工具类库需要给公司许多人使用,无论是新来的还是已经熟悉的,完善的注释可以让新手很快的上手。

    随着这个工具类库的不断完善,你会越来越喜欢它,而且其应用面会更广,功能也会更加强大,成为一个团队或者一个公司开发必备的工具。

    三、我的工具类库有哪些东西?

         现在我在完善的这个工具类库也是根据项目的所需来完善以及一些个人认为常用的,还有个别是从网络上搜集下来封装进去的,见如下图:

    pic104

    Data:这个主要是针对各类数据库做的一些Helper,包括SQLHelper,SqliteHelper。

    Extensions:这个针对.NET3.0开始提供扩展方法而编写的一些扩展方法,包括:Strings(字符串扩展)、Dates(日期扩展)、IEnumerators(集合扩展),有关扩展方法相关文章可以看看鹤冲天写相关文章:点我进入

    FastReflection:这个是老赵写的反射用的一个类库,文章地址:Fast Reflection Library

    Files:主要是对文件操作相关的一些封装。

    Images:针对图片相关的操作,如:缩略图生成、获取系统图标等。

    Security:包括了一些常见的加密解密方法,MD5,DES等。

    Special:这个里面分了3个Helper,XP及Vista下使用的CodeTimer(老赵写的一个简单的性能计数器:CodeTimer),WindowsHelper(仅有一个方法,日志记录)和WebHelper(web开发所需的各种方法,如:Excel/Word导出、向客户端发送消息、文件上传/下载)

    Text:这个主要是针对文本的操作,包括:各种常见格式的验证、字符串截取等,不过基本现在已经被扩展方法中Strings给取代了(基本已经移到了扩展方法中)。

    不过就目前来说这个工具类库还不完善,比如:一些功能的缺失、注释不完善等,所以目前来说就不放出源码了(省的被骂),最近准备找个时间再去重新整理下。

    这边给出个园子里NanCo发布的一个工具类库:点我进入

  • 相关阅读:
    关于回调函数的初探
    细节决定成败
    数据的导航与跳转
    如何在同一页面显示父子表的内容
    从Request到Response之间的所有事件发生的顺序
    如何更改网站的一些公共数据
    如何实现计数器
    DataTable.Select方法
    登出代码
    如何构建自定义控件
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1931009.html
Copyright © 2011-2022 走看看