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

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

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

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

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

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

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

public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){SqlCommand cmd = new SqlCommand();using (SqlConnection connection = new SqlConnection(connectionString)){PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);object val = cmd.ExecuteScalar();cmd.Parameters.Clear();return val;}}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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发布的一个工具类库:点我进入

话说,各位看过的朋友如果觉得本文对您还有点用,或者觉得本文还有价值的话,麻烦将鼠标移到【推荐】上,帮我点击下,非常非常的感谢!

 

项目过程中所遇到的各种问题记录

编辑器篇:

FCKeditor相关知识及各种常见使用问题

FCKeditor自定义上传路径配置

使用FCKeditor生成静态分页HTML

图表篇:

有关MSChart的一些小技巧

asp.net上不错的图表选择—FunsionCharts

ORM篇:

使用NHibernate配置对象实体的一些小问题

有关NHibernate查询封装

部署篇:

项目部署过程中那些纠结的问题-IIS

项目部署过程中那些纠结的问题-SQLServer

工具篇:

.NET开发时常用的工具类库

转载于:https://www.cnblogs.com/kyo-yo/archive/2010/12/24/Problem-Record-Tools-NET-Development-Tools-Commonly-Used-In-Libraries.html

[项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库相关推荐

  1. [项目过程中所遇到的各种问题记录]部署篇——项目部署过程中那些纠结的问题-SQLServer...

    前一篇文章说了些有关IIS的,这篇则是说SQLServer的,相比IIS来说,SQLServer的配置过程中问题就少了许多,而且都比较有针对性,下面开始记录: 注:由于实际项目的开发都是基于SQL20 ...

  2. [项目过程中所遇到的各种问题记录]图表篇——asp.net上不错的图表选择—FunsionCharts...

    [项目过程中所遇到的各种问题记录]图表篇--asp.net上不错的图表选择-FunsionCharts 在上一篇文章中我介绍了winforms下的图表控件--MSChart,虽然MSChart同样为我 ...

  3. [项目过程中所遇到的各种问题记录]编辑器篇——FCKeditor自定义上传路径配置...

    在上一篇文章中,我介绍了FCKeditor的一些相关知识以及我在使用过程中碰到的一些问题及解决方案,今天这篇则是主要记录如何通过FCKeditor来分类管理上传的文件. 以下是本文所要介绍的内容: 1 ...

  4. [项目过程中所遇到的各种问题记录]编辑器篇——使用FCKeditor生成静态分页HTML...

    继续编辑篇的内容,本文是编辑器篇的最后一篇,前面2篇分别是FCKeditor相关知识及各种常见使用问题和FCKeditor自定义上传路径配置,今天这篇文章主要是介绍如何使用fckeditor来生成静态 ...

  5. [项目过程中所遇到的各种问题记录]编辑器篇——FCKeditor相关知识及各种常见使用问题...

    马上2010年就要结束了,所以这几天准备花点时间把这一年中在开发过程中遇到的问题及解决方案记录下来,以备日后使用,目前先规划了:编辑器篇(仅针对asp.net开发中的fckeditor).图表篇(wi ...

  6. 谈谈在项目过程中的发生争论与争吵

        有一句古话说的好, " 有人的地方就有江湖".       与瀑布模式相比, 敏捷开发  更注重人与人的交流. 所以在开发过程中更有 可能会发生 各种争论.争吵.     ...

  7. Java实现CRM项目过程中的细节记录(一)

    CRM项目实现过程中的细节记录(一) 文章目录 CRM项目实现过程中的细节记录(一) 一.数据库相关细节 1. 表名 2. 表字段说明 3. 不使用主外键约束 4. 不使用主键自动增长 UUID 5. ...

  8. 开发中遇到的问题和经验 记录 ------- 后端篇

    核心价值就是把现实世界的业务操作搬到计算机上,通过计算机软件和网络进行业务和数据处理,但是时至今日,能用计算机软件提高效率的地方,几乎已经被全部发掘过了,必须能够发掘出用户自己都没有发现的需求,必须洞 ...

  9. 记录开发移动端项目过程中的各种问题、插件及教程(不定时更新)

    本文为整理记录本人开发移动端项目的过程中,针对项目中业务需求所碰到的各种坑.用到的各种插件及教程整理?. 以下为教程整理: 1.再聊移动端页面的适配_Layout, 布局, mobile, CSS 教 ...

最新文章

  1. 白盒测试之语句分支条件覆盖
  2. java中如何将string 转化成long(亲测)
  3. 前沿分享|阿里云数据库解决方案架构师 王宏宇:云原生数据仓库AnalyticDB在零售行业的深度应用和业务价值
  4. 如何给远程计算机添加用户,如何访问远程计算机以添加/删除/管理用户帐户?...
  5. 工作289:父子组件传值控制弹窗关闭
  6. PAT:组个最小数(C++)
  7. 第三章EF的基本使用 EF数据实体模型的更新
  8. php 进程管理及操作
  9. 如何获取系统Home(Launcher)应用判断用户是否处于home界面
  10. android实战技巧,实战技巧:Android异步指南
  11. python中的匿名函数_Python匿名函数详解
  12. JDK中提供的类(常用API)
  13. 公众号文章批量导出工具
  14. 中国能源物联网行业运营格局及供需态势分析报告2022-2028年版
  15. 中国广电即将放号,感受到压力的中国移动率先推出19元5G套餐
  16. 微信公众号笔记(一)
  17. 明道云APaaS在酒店业中的应用场景例举
  18. 关于sublime Text3 显示gkb乱码的问题
  19. 适用于顺序磁盘访问的1分钟法则
  20. Cadence OrCAD快速查找元件和网络的方法

热门文章

  1. layui 给table里面的添加图标_layui教程---table
  2. Glide加载圆角矩形图片
  3. 进制转换【最全进制转换汇总】(整数_小数_正数_负数)正负数整数小数十进制转任意进制-正负数整数小数任意进制转十进制-正负数低进制转高进制-正负数高进制转低进制
  4. C++ 已知两个时间(年月日)求日期差
  5. Android Studio 4.2Previw版本编译错误提示Disable offline mode and rerun the build
  6. QuerySet浅尝
  7. 数字校园APP开发与应用
  8. 获取Jenkins项目名称
  9. 使用 NodeBB 搭建的中文社区索引
  10. 微信营销为什么会用到微信公众号客服系统?