最近在学习web后台以及Python,到了程序员的转折年纪了,哎。估计很久不会写博文了。言归正传。
在原理的数据库连接池HiKari项目上。我扩展了独立的3个库,说是3个库,其实原本该是一个库。先聊聊这个库,库完全独立,只是因为是数据库操作,所以放在一起了,其实现在完全没有关联。这几个库的作用就是我们常用的功能,实体转换。将DataTable,DataReader转换成实体。基本类库采用的是反射,表达式树进行转换。另外2个库是分别补充.net core库和.net framework库使用emit技术进行转换。由于现在标准库还没有支持emit很多方法,但是net core库和.net framework库已经有了,所以分别增加了,预计下一版本标准库会支持,到时升级,然后去除另外2个库,将emit转换代码移植到标准库,就只有一个库了。
不知道大家平时使用ORM框架否,我是没有用过的。但是上面这个实体转换就是ORM的核心了。至于其它,就是使用风格了。不管你是说明ORM,最后都是转成SQL语句执行,唯独多一个转换实体。
想想ORM在干嘛?说简单点就是将一把常用的SQL语句,用API的方式封装出来,让你用调用函数的方式使用,如果业务上是单表,那就剩了很多麻烦。其实想想,从你的UI开始传入参数,不就是一个ORM的类似过程。但是业务各不相同,没有完全统一的方式。大概就是讲对象转换成SQL,整个高大尚的词linq to sql ,类似功能。最简单的封装,SQL语句,Model参数解析,Dapper 轻量框架。
开始,我打算封装一个,但是后来觉得没有必要了,既然有这么多了,自己浪费时间干嘛,使用久经考验的岂不是很好,浪费时间。要使用框架,现成开源的有,要自己造轮子,满足自己的项目,就自己把类库封装起来,也许就一个接口和类就能解决问题。
将SQL参数与model转换一下就好。没有必要重复造轮子。所以我选择提供使用的工具类,适当的封装但是不失去灵活。其余自己用一个类实现就好,无法就是反射属性值,用名称匹配参数,可以字符串替换,可以正则表达式。总之就看自己怎么拼接SQL。所以我只提供基本的东西,自己需要就自己简单封装。ORM一般是牺牲了性能的。如果你了解过很多,对外其实都是一样的,总体就是查询方法,执行接口方法。如果提供json字符串返回,哈哈哈,把List<T>选择一个高性能的库序列化json不就完了吗。看看,就是组合封装而已,再加一层,或者一行代码而已。
也许后面会简单写个样例在项目中,谁知道呢,毕竟个人生活也需要时间。我提供的封装,是一层层起来,不会影响底层一级的使用。所以找到适合自己的封装一层即可。
提供的类任然在HiKari项目中,已经提交GitHub。
这里提到了几种转换方式,其实就是几种实现反射方式,不同机器配置是不一样的,简单给大家一个执行速度的比较
直接调用>=Emit>委托(一般object参数委托要好与泛型,在运行过程是需要监测类型的)>表达式(表达式树)>反射。