2023年6月21日发(作者:)
ORMapping研究报告(转)< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>1. 业务实体层的设计⽅案选择1) 业务实体层的作⽤ ⼀般的应⽤程序分层的结构如下:可见,在分层的时候,我们会增加⼀个实体层,它的作⽤如下: a. 将显⽰数据和实际的存储区域隔离,保证了业务的独⽴性,提⾼了可重⽤性。 b. 在业务层和表现层之间传递数据。(如果没有实体层的话,我们需要把表的每个字段作为⼀个参数在它们之间传递,如果修改的话,将需要影响到程序的各个层) c. 提供更⼤的可收缩性。2) 业务实体层的⼏种选择⽅案及其优缺点。 在.NET环境下实现业务实体有下⾯的⼏种选择: a. DataReader BE 具有最快的读取速度,⽤于只读的场合,不具有OO的概念。 b. XML BE 可以与XML Reader和DataSet转换。缺点:性能低,验证、解析、显⽰、排序等都很复杂。 c. Generic DataSet BE 优点:数据绑定等。缺点:客户端必须通过集合来获取数据,没有类型,实例化开销⼤,调度性能低。 d. Typed DataSet BE 优点:由类型,可以进⾏类型检查。缺点:只能从DataSet继承,部署不⽅便,可扩展性差,实例化开销⼤,调度性能低。 e. Custom BE 优点:性能调优,代码更具有可读性,⽤⾃定义实体类定义⼀个良好的接⼝,将复杂问题隐藏在其中。缺点:设计开发都很复杂,需要⾃⼰去实现CURD操作,⾃⼰去实现数据绑定,⼯作量很⼤。 f. OR Mapping的实现 它具有⾃定义类的所有优点,同时实现了CRUD,数据绑定等操作。2. 什么是OR Mapping? ORM,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象⼀样操作它就可以了。 让我们从OR开始。字母O起源于"对象"(Object),⽽R则来⾃于"关系"(Relational)。⼏乎所有的程序⾥⾯,都存在对象和关系数据库。在业务逻辑层和⽤户界⾯层中,我们是⾯向对象的。当对象信息发⽣变化的时候,我们需要把对象的信息保存在关系数据库中。 当你开发⼀个应⽤程序的时候(不使⽤OR Mapping),你可能会写不少数据访问层的代码,⽤来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的⽅法来读取对象数据,改变状态对象等等任务。⽽这些代码写起来总是重复的。 如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通⽤的模式。我们以保存对象的⽅法为例,你传⼊⼀个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运⾏SqlCommand。对于每个对象都要重复的写这些代码。 除此之外,还有更好的办法吗?有,引⼊⼀个OR Mapping。实质上,⼀个OR Mapping会为你⽣成DAL。与其⾃⼰写DAL代码,不如⽤OR Mapping。你⽤OR Mapping保存,删除,读取对象,OR Mapping负责⽣成SQL,你只需要关⼼对象就好。3. 为什么要采⽤OR Mapping?1) 提⾼学习开发效率,降低开发成本。 使⽤ORM可以⼤⼤降低学习和开发成本,现代技术的发展,使得我们不得不不停地学习。我们不仅要学习⾯向对象、UML、设计模式等知识,⽽且还需要学习Sql Server、、DataSet、DataReader等知识。⽽在实际的开发中,真正对客户有价值的是其独特的业务功能,⽽现在的现状是我们花费了⼤量的时间在编写数据访问,CRUD⽅法,包括后期的Bug查找,维护等也会花费相当多的时间在数据处理上。这就是说,我们在实际的开发中很多的时间都被浪费在根本不创造价值的⾮业务事件上了。 在使⽤ORM之后,我们将不需要再浪费太多的时间在和Sql语句上。ORM框架已经把数据库转变成了我们熟悉的对象,我们将只需要了解⾯向对象开发就可以实现数据库应⽤程序的开发。2) 简化代码,减少BUG数量。 通过建⽴ORM系统,能够⼤量减少程序开发代码,实现ORM后,开发数据层就⽐较简单,⼤⼤减少了出错机会。
3) 提⾼性能 同时通过Cache的实现,能够对性能进⾏调优,实现了ORM区隔了实际数据存储和业务层之间的关系,能够对每⼀层进⾏单独跟踪,增加了性能优化的可能。
4) 隔离数据源,可以很⽅便的转换数据库 利⽤ORM可以将业务层与数据存储隔开,开发⼈员不需要关系实际存储的⽅式,如果我们需要把SQL Server数据库换成ORACLE数据库,只需要修改配置⽂件就可,不需要修改程序。4. ORM典型⼯具介绍由于ORM带来的强⼤功能,已经有很多公司或者个⼈提供ORM的⼯具。主要途径有三个:a.微软提供的ObjectSpaces 微软在 2005的Alpha版中就提供了ObjectSpaces,它是在数据层上的⼀层ORM框架。但是,根据微软⽹站上提供的消息,ObjectSpaces将不会和2005 ⼀起发布,它可能会在2006(7)年和WinFS⼀起发布。所以可能⽆法在最近的项⽬中使⽤。 注:ObjectSpaces已经正式被在它基础上重新开发的 LinQ 所取代 b.开放源码的免费ORM 虽然.NET领域的开发源码还远远不及Java领域,但是已经有好多⼈把Java领域中的最优秀的开发源码转移到.NET平台上来。这其中包括做单元测试的NUnit,做⽇志的Log4NET,做AOP的,以及我们要介绍的做ORM框架的NHibernate。
开发源码的更新都很频繁,如果你发现Bug报上去后,他们将会很快在新发布的版本中进⾏更新。 开发源码的作⽤不仅在于使⽤,⽽且他们本⾝都是⾮常优秀的架构。在购买计算机图书的时候有⼀句话叫“No Coding, No Reading”,⽽开放源码中提供了如何构建架构、如何使⽤模式的最好范例。
关于NHibernate现在⽂档还不是很多,但是相信随着它的正式版的发布,会有越来越多的官⽅⽂章出现,也会有越来越多的使⽤者在⽹上提供⾃⼰的经验。当然,最直接和有效的⽅法还是去阅读它的源码,因为开放源码的内部实现机制全部透明,所以它的代码就是最好的⽂档。它的代码结构很清晰,⽤法更简洁,并不是很难阅读。
2023年6月21日发(作者:)
ORMapping研究报告(转)< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>1. 业务实体层的设计⽅案选择1) 业务实体层的作⽤ ⼀般的应⽤程序分层的结构如下:可见,在分层的时候,我们会增加⼀个实体层,它的作⽤如下: a. 将显⽰数据和实际的存储区域隔离,保证了业务的独⽴性,提⾼了可重⽤性。 b. 在业务层和表现层之间传递数据。(如果没有实体层的话,我们需要把表的每个字段作为⼀个参数在它们之间传递,如果修改的话,将需要影响到程序的各个层) c. 提供更⼤的可收缩性。2) 业务实体层的⼏种选择⽅案及其优缺点。 在.NET环境下实现业务实体有下⾯的⼏种选择: a. DataReader BE 具有最快的读取速度,⽤于只读的场合,不具有OO的概念。 b. XML BE 可以与XML Reader和DataSet转换。缺点:性能低,验证、解析、显⽰、排序等都很复杂。 c. Generic DataSet BE 优点:数据绑定等。缺点:客户端必须通过集合来获取数据,没有类型,实例化开销⼤,调度性能低。 d. Typed DataSet BE 优点:由类型,可以进⾏类型检查。缺点:只能从DataSet继承,部署不⽅便,可扩展性差,实例化开销⼤,调度性能低。 e. Custom BE 优点:性能调优,代码更具有可读性,⽤⾃定义实体类定义⼀个良好的接⼝,将复杂问题隐藏在其中。缺点:设计开发都很复杂,需要⾃⼰去实现CURD操作,⾃⼰去实现数据绑定,⼯作量很⼤。 f. OR Mapping的实现 它具有⾃定义类的所有优点,同时实现了CRUD,数据绑定等操作。2. 什么是OR Mapping? ORM,即Object-Relationl Mapping,它的作⽤是在关系型数据库和对象之间作⼀个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象⼀样操作它就可以了。 让我们从OR开始。字母O起源于"对象"(Object),⽽R则来⾃于"关系"(Relational)。⼏乎所有的程序⾥⾯,都存在对象和关系数据库。在业务逻辑层和⽤户界⾯层中,我们是⾯向对象的。当对象信息发⽣变化的时候,我们需要把对象的信息保存在关系数据库中。 当你开发⼀个应⽤程序的时候(不使⽤OR Mapping),你可能会写不少数据访问层的代码,⽤来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的⽅法来读取对象数据,改变状态对象等等任务。⽽这些代码写起来总是重复的。 如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通⽤的模式。我们以保存对象的⽅法为例,你传⼊⼀个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运⾏SqlCommand。对于每个对象都要重复的写这些代码。 除此之外,还有更好的办法吗?有,引⼊⼀个OR Mapping。实质上,⼀个OR Mapping会为你⽣成DAL。与其⾃⼰写DAL代码,不如⽤OR Mapping。你⽤OR Mapping保存,删除,读取对象,OR Mapping负责⽣成SQL,你只需要关⼼对象就好。3. 为什么要采⽤OR Mapping?1) 提⾼学习开发效率,降低开发成本。 使⽤ORM可以⼤⼤降低学习和开发成本,现代技术的发展,使得我们不得不不停地学习。我们不仅要学习⾯向对象、UML、设计模式等知识,⽽且还需要学习Sql Server、、DataSet、DataReader等知识。⽽在实际的开发中,真正对客户有价值的是其独特的业务功能,⽽现在的现状是我们花费了⼤量的时间在编写数据访问,CRUD⽅法,包括后期的Bug查找,维护等也会花费相当多的时间在数据处理上。这就是说,我们在实际的开发中很多的时间都被浪费在根本不创造价值的⾮业务事件上了。 在使⽤ORM之后,我们将不需要再浪费太多的时间在和Sql语句上。ORM框架已经把数据库转变成了我们熟悉的对象,我们将只需要了解⾯向对象开发就可以实现数据库应⽤程序的开发。2) 简化代码,减少BUG数量。 通过建⽴ORM系统,能够⼤量减少程序开发代码,实现ORM后,开发数据层就⽐较简单,⼤⼤减少了出错机会。
3) 提⾼性能 同时通过Cache的实现,能够对性能进⾏调优,实现了ORM区隔了实际数据存储和业务层之间的关系,能够对每⼀层进⾏单独跟踪,增加了性能优化的可能。
4) 隔离数据源,可以很⽅便的转换数据库 利⽤ORM可以将业务层与数据存储隔开,开发⼈员不需要关系实际存储的⽅式,如果我们需要把SQL Server数据库换成ORACLE数据库,只需要修改配置⽂件就可,不需要修改程序。4. ORM典型⼯具介绍由于ORM带来的强⼤功能,已经有很多公司或者个⼈提供ORM的⼯具。主要途径有三个:a.微软提供的ObjectSpaces 微软在 2005的Alpha版中就提供了ObjectSpaces,它是在数据层上的⼀层ORM框架。但是,根据微软⽹站上提供的消息,ObjectSpaces将不会和2005 ⼀起发布,它可能会在2006(7)年和WinFS⼀起发布。所以可能⽆法在最近的项⽬中使⽤。 注:ObjectSpaces已经正式被在它基础上重新开发的 LinQ 所取代 b.开放源码的免费ORM 虽然.NET领域的开发源码还远远不及Java领域,但是已经有好多⼈把Java领域中的最优秀的开发源码转移到.NET平台上来。这其中包括做单元测试的NUnit,做⽇志的Log4NET,做AOP的,以及我们要介绍的做ORM框架的NHibernate。
开发源码的更新都很频繁,如果你发现Bug报上去后,他们将会很快在新发布的版本中进⾏更新。 开发源码的作⽤不仅在于使⽤,⽽且他们本⾝都是⾮常优秀的架构。在购买计算机图书的时候有⼀句话叫“No Coding, No Reading”,⽽开放源码中提供了如何构建架构、如何使⽤模式的最好范例。
关于NHibernate现在⽂档还不是很多,但是相信随着它的正式版的发布,会有越来越多的官⽅⽂章出现,也会有越来越多的使⽤者在⽹上提供⾃⼰的经验。当然,最直接和有效的⽅法还是去阅读它的源码,因为开放源码的内部实现机制全部透明,所以它的代码就是最好的⽂档。它的代码结构很清晰,⽤法更简洁,并不是很难阅读。
发布评论