使用.net有一年多了,除了log4net自己很少使用其他开源的框架或是工具。下面介绍一下项目中经常使用的三个小工具。
1.Dapper
Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
它的特点有:
a.轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
b.速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
c.支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
d.可以映射一对一,一对多,多对多等多种关系。
e.性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
f.支持FrameWork2.0,3.0,3.5,4.0,4.5
使用方法:
首先从GitHub上获取Dapper:https://github.com/SamSaffron/dapper-dot-net
当然这么多都是分版本表示,其实这么多文件就取三个文件就可以了,一个SqlMapper.cs,一个是Database.cs,再加一个扩展属性的类IgnorePropertyAttribute.cs。
使用方式:
class Program
{
Static string _strConn = "Data Source=192.168.11.128;InitialCatalog=PD_ShopDB;uid=sa;password=123;";
static string _strSQL = "SELECTBrandID,BrandName,IsEnable,BrandEnName,BigLogo,SmllLogo,BrandStory,BrandLink,IsDelete,CreateDate FROM Brands WITH(NOLOCK)";
static void Main(string[] args)
{
using (SqlConnection connection = newSqlConnection(_strConn))
{
connection.Open();
var brand =connection.Query
foreach (var item in brand)
{
Console.Write(item.BrandID+ " " + item.BrandName);
}
}
Console.ReadKey();
}
}
2.postsharp
面向切面编程:
AOP的核心思想就是在编写代码时将横切关注点分离出来,形成单独的模块,单独编写和维护,不再分散到各业务函数,使得业务函数仅包含核心业务代码,从而解决以上问题。而在程序编译或运行时,通过某些手段(下文介绍)令独立的横切关注点代码可以与核心业务代码自动协作运行,完成本身需要的功能。
编译型语言 托管型语言
PostSharp是一个用于在.NET平台上实现AOP的框架,是我比较常用的一个AOP框架。
PostSharp使用静态织入方式实现AOP,其连接点非常丰富,使用简单,而且相对其它一些.NET平台上的AOP框架来说,PostSharp较为轻量级,但是功能却一点也不逊色,因此是我比较喜欢的一个AOP框架。更多关于PostSharp的介绍请参看其官方网站。
另外使用PostSharp与其它框架不太一样的是一定要下载安装包安装,只引用类库是不行的,因为上文说过,AOP框架需要为编译器或运行时添加扩展。
3.nuget
简单的说NuGet可以使我们的工作更方便,当我们的项目里要引用到的一些库时候,比如JQuery、Newtonsoft.Json、log4net等,我们需要从网上下载这些库,然后依次拷贝到各个项目中,当有的类库有更新时又不得不再重复一遍很是繁琐,这时就可以考虑使用NuGet来帮我们管理和更新这些类库,而且更新类库时会自动添加类库的相关引用,方便至极。当然网上一些我们常用的类库更新频率不是很高而且即便出了新版本我们也没必要总是保持最新,故这点对我们的帮助比较有限,个人认为NuGet最大的好处在于可以搭建自己的类库服务器,想想一下吧,在一些较大些的公司里面有很多的项目,然后其中有一些是整个组,甚至整个公司通用的类库,当这些类库有更新后我们需要依次拷贝到我们的项目,甚至于有时候我们自己都搞不清楚各个项目里的版本是否一致,有时偶尔一两个项目忘了复制更新出现莫名其妙的错误,为此头疼不已,现在有了NuGet,世界从此而不同。