距离上篇《Step by Step-构建本身的ORM系列-数据访问层》的时间间隔的过久了,很对不住你们啊,主要是由于在写《设计模式-系列索引系列》必须提早先写完,才能html
继续这个系列,固然我也在写这几个系列的过程当中,对ORM这个系列中的原来的实现的想法有了新的认识和改进,固然这些都不是说是很先进的思想或者认识,也多是你们见过数据库
的思路吧,但愿后面我能在写设计模式系列的过程当中,穿插讲解ORM系列,固然个人这个构建的系列,也只能说是很简易的,本身平时开发个小应用工具或者什么的,可能用他,设计模式
由于是本身开发的嘛,毕竟使用起来仍是比较顺手的!符合本身的操做习惯嘛。缓存
固然我写这个系列的过程当中,也会有本身认识偏激的地方,或者思路不正确的地方,还请大伙多多指出和批评。我也是在我目前的项目中学习到了不少的宝贵的经验,其实多线程
咱们应该能看到ORM给咱们提供的方便和不便之处,咱们取其精华,剔除糟粕,不过这真的很难。这块可能还须要大牛们多多指点。架构
对于上篇文章中,咱们提到过几个问题,而后通过我与很多朋友之间的交流,得出了一些不错的意见和想法,这里分享一下总结后的内容。并发
一、提供一个通用的查询方法,能够动态的返回列。框架
对于这个问题呢,咱们通过商讨考虑了最后最可能的状况以下,咱们借助于平时咱们知道的params的动态行来进行返回,可能的实例代码以下:异步
固然这里给出的代码不必定是最好的,固然这里给出的是目前我的认为不是太差的方案了,若是您有好的方案请留言,谢谢您了!分布式
二、咱们如何在表现层中更好的调用咱们的查询层服务方法:
这是咱们上篇给出的一个实现方式,后来思考下,这样的方式其实也不是最好的方式,通过思考,咱们将上面的传入查询条件的语句进行封装,修改为以下形式。
第二步,咱们提供参数辅助类:
第三步,抽象工厂,负责建立上面的辅助类对象实例
最后,给出具体的调用测试代码:
上面咱们讲述了,上篇中解决的几个问题,相信这类的问题,在您的项目中,应该也是很常见的,固然,若是您有更好的方法,请您反馈,获得您的反馈是我最大的动力,谢谢!
本篇将会开始讲述ORM层中可能应该要提供的配置管理层的相关职责和功能,咱们都知道目前咱们在很流行的ORM框架中,都会为了应对不一样程度的变化,咱们为为了提
高咱们的ORM框架的灵活性或者适应性,咱们经过配置文件来应对这样的变化,我想NHibernate是将这个方面应用最好的框架之一了,我呢,也是最近才开始看NHibernate的框
架使用,也是参考博客园中一些很好的教程。
本文将会结合配置管理层应该提供的相关功能和ORM如何与配置管理层相结合来讲说吧:
我认为的在ORM中应该提供的配置管理层来进行扩展的可能功能列表以下:
一、对于底层ORM中的线程池的配置管理。
二、对于底层的ORM中的数据链接池的配置
三、ORM提供的对象工厂的程序集配置。
四、ORM提供的缓存服务的相关配置信息。
五、ORM中的底层对于多模式的支持。
六、ORM的对于服务的启用与否的控制。
七、配置ORM的其余相关参数,好比是否启用事务,是否启用分布式等等。
一、开篇。
二、摘要。
三、本文大纲。
四、ORM之数据访问层分析。
五、本章总结。
六、系列进度。
七、下篇预告。
4.一、对于底层ORM中的线程池的配置管理
ORM底层应该对多线程并发的时候,作一个考虑,好比咱们是否使用系统自身提供的线程池来控制互斥资源的放问,来控制并发,这个时候,咱们能够进行控制,而且可
以控制线程池中的活动线程最多能够同时运行的最大并发数量,包括资源持有的最大时间,还有就是等待超时的时间,线程的生命周期等等。这个咱们怎么理解呢?就是以下的过
程:
4.二、对于底层的ORM中的数据链接池的配置
数据链接池的主要做用是什么?咱们必须搞清楚,因此才决定有没有必要使用这个链接池,通常来讲,系统的使用链接数超过2个使用链接池就是有必要的,由于咱们每次
与数据库创建连接都须要耗费不少的资源,若是咱们可以在不使用数据库服务的时候,咱们把这个连接占用的资源都释放掉,那么下次咱们访问数据服务的时候,咱们又须要建立
新的连接,这样每次在建立连接的时候,就消耗了太多的系统性能,咱们是否可以将这些建立好后的连接缓存起来,放在数据库连接池中,这样若是咱们发现数据库链接池中的有
空的连接存在,咱们就直接拿来使用就行了,若是数据库链接池中的资源都在占用,那么咱们能够有一个队列来缓存咱们要执行的任务队列,经过很好的控制管理,咱们来控制任
务的异步执行。咱们来看看数据库链接池的状况,应该和线程池在处理上差很少:
4.三、ORM提供的对象工厂的程序集配置
咱们提供一个配置项,完成对抽象工厂的配置,参考咱们以前讲述的设计模式系列中的抽象工厂的配置,完成通用对象的建立。若是您尚未看如何配置,请查看以下文章:
《系统架构技能之设计模式-抽象工厂模式》
若是您有更好的意见或者想法,能够提出来,谢谢!
4.四、ORM提供的缓存服务的相关配置信息
缓存服务,咱们知道,ORM的性能损失就是在对象关系映射的相互映射中的损失,因为,咱们这里又是采用特性+反射来作的,那么无疑,咱们若是不缓存关系映射的过
程,那么咱们的ORM设计出的效率,确定是否是让咱们很满意的,固然数据量很小的状况下仍是能够的,可是一旦数据量上升,那么将会是灾难。
咱们提供的缓存能够在将对象映射为数据库表字段的这块,否则每次进行持久化操做的时候,咱们就要反射一次,那么对于常常操做的对象,无疑是个巨大的性能损失,
咱们能够考虑将这块的映射关系,缓存下来。
咱们的缓存服务还能够对自动生成SQL语句的时候的缓存,主要体如今,咱们不用每次建立SQL语句的时候,咱们都反射来作,咱们经过缓存来完成。
咱们的缓存服务还能够是对数据的缓存,好比咱们底层设计好的缓存策略,为上次模块提供支持,好比咱们提供底层的数据缓存,经过提供相关的配置,咱们能够提供类
似iBATIS提供的缓存形式。咱们能够配置缓存的过时策略,和引发缓存变化的缘由等等。
具体的配置形式:
还包括一些底层参数配置的缓存,因为有些项咱们每次读取配置文件可能效率上出如今文件的IO操做,这个时候,咱们能够考虑把配置信息缓存起来,对于一些不是很常常变化的内容。
对于配置文件的操做,咱们能够考虑图形化的操做界面,为用户提供更好的使用方式。
4.五、ORM中的底层对于多模式的支持
这里提出的多模式,也是参考一些对于内部会议的一些思考,好比说,咱们的ORM对于debug模式和其余的release版本提供的功能是否是应该不同。或者说ORM的适应性应该更强大。
咱们经过配置项来提供,咱们内部底层的ORM提供对不一样的模式的支持,包括咱们底层ORM的可调式的设计和其余方面的设计思想。
咱们知道对于底层框架的测试是个很大的工程,须要不断的测试,不断的优化,才能提升ORM的稳定性和性能,因此咱们可能前期考虑的比较多,那么咱们才能在ORM的
设计中考虑到更多的适应性和扩展性,只有这样,咱们的底层测试工做才能开展的很好,也就能知足后续的不断的变化需求。
4.六、ORM的对于服务的启用与否的控制
ORM的服务的启用禁用,主要是体如今咱们底层的一些功能的设定,好比说是否是动态启用日志功能,或者说是否是启用底层的底层验证功能,还包括其余的一些AOP的
相关设置,包括一些配,启用禁用序列化的服务等。对于查询服务中的是否启用缓存分页,包括缓存的替换方式,是增量叠加仍是彻底覆盖的方式等。
4.七、配置ORM的其余相关参数
ORM的其余配置项,我理解中的应该还包含以下的配置服务:
具体的详细内容,我估计我也就没有什么特别详说的内容了,你们一看就知道了。
本章都是关于配置的相关内容,本文并无提供出具体的代码实现,因为对于配置文件的操做, 其实网上有太多的例子了,我这里也不班门弄斧的给出大伙了,网上有不少
更好的例子,我这里就不给出操做代码,VS内置了很强大的操做配置文件的类,咱们能够简单的包装下便可知足咱们的要求,固然若是知足不了,那你就从新扩展功能吧,我上
面只是给出了ORM可能提供的功能配置项,也没有给出配置文件的具体格式和内容,固然若是我上面有什么遗漏或者没有考虑到的地方,还请您多多指出,我会补上去,谢谢您的
提醒!
二、Step by Step-构建本身的ORM系列-数据访问层
三、Step by Step-构建本身的ORM系列-配置管理层
四、Step by Step-构建本身的ORM系列-对象映射层[上]
五、Step by Step-构建本身的ORM系列-对象映射层[中]
六、Step by Step-构建本身的ORM系列-对象映射层[下]
七、Step by Step-构建本身的ORM系列-测试ORM框架
八、Step by Step-构建本身的ORM系列-瓶颈、优化
九、Step by Step-构建本身的ORM系列-实例
下篇咱们将会开始讲述对象映射层中的具体的缓存及相关的过时策略,还包括一些底层ORM对象映射过程当中的可测试的设计及可跟踪的设计,但愿能够对你们有所帮助,如
果您有任何的已经和建议,请您留言,因为本人水平有限,错误之处在所不免,还请你们多多指出!