很多项目的开发都是基于已有数据库做开发的。遗留数据库的存在增加了java模型和数据模型之间的障碍。
很多朋友为此是否选择hibernate或者别的Jdbc wrapper的开发框架而犹豫不决。
其实,用hibernate类似的orm工具总归是明智的选择,当然不是唯一的明智的选择,我写这篇文章只是希望能够给那些还在犹豫不决的人提供一些自信的力量,可以果断的作出自己的决定。
有一个朋友询问过针对遗留系统做模型设计的问题 。很难简单回答这个问题,但是我可以提供我的一些经验,同时也把这篇帖子作为对那位朋友的一个完整的回答,希望能顾对他有所帮助。
针对统一的业务逻辑,对 业务模型,DAO/Service 分别设计精巧的的继承体系。
很多朋友对此抱很谨慎的态度,因为他们觉得遗留系统很难有效支持业务模型的继承体系。
他们的担心是有理的,而且通常情况下,遗留系统确实无法支持现有ORM的类继承体系。然而,遗留系统不支持,并不能阻碍我们在业务模型畅通无阻的使用类继承,达到DRY的目标。抽取出的抽象模型可以更容易实现DRY,同时这里面的业务模型的层次设计很多时候也是真正反映了“业务统一处理”的需求。
这样的设计出现了很有意思的一个局面,业务模型是继承体系的模型,而数据模型是一对一映射的表模型,当用这种设计来处理业务的时候,特别是在处理“统一的抽象的业务逻辑”的时候,比支持继承模型的表模型 付出更多的一些努力才能达到,很多朋友一直担心这个“多付出”的努力是否会很可怕。 真的不用担心,并没有付出多少努力,你只需要在 DAO或者你的Service模块里面,做针对性的继承性的设计。通过这个合理的继承体系的DAO/Service模块,我们就可以在里面减少甚至完美弥补 因为 表模型不支持继承体系的业务模型带来的问题。
一般来说,DAO/Service最好有这样的层次:
BaseService<----UserService,OrderService
class BaseService { update,create,delete,findById..}
保证各个子类最终的CRUD都是通过 baseService.CRUD来完成 。
这样的DAO/Service类层次设计,为我们设计的业务模型的继承体系带来了“用武之地” ,在baseService的这个地方,大家可以把一些“需要统一处理的”业务逻辑放在此来做,比较有代表性的一点是 :
class abstract BaseService extends HibernateDAOSupport {
public void create(Object o){
if(o instanceof PublishableModel){
publish((PublishableModel)o);
}
getHibernateTemplate().save(o);
}
}
似乎很别扭但却很有“意义”的一段代码,PublishableModel这个抽象类代表了业务模型中某个可以统一处理的业务抽象模型,而 这段代码:
if(o instanceof PublishableModel){
publish((PublishableModel)o);
}
给了这个业务模型抽象体系以真正发挥作用的“用武之地” 。
作为有经验的 开发人员,无论何时何地,都应该始终不渝的坚持并且贯彻“DRY”的宗旨。
分享到:
相关推荐
2. **模型设计**:在对象模型设计阶段,需要定义与数据库表对应的实体类,包括类的属性(对应数据库字段)和行为(对应业务逻辑)。此外,还需要定义实体间的关系,如一对一、一对多、多对多等,这些关系会映射到...
ORM(Object-Relational Mapping,对象关系映射)框架是一种软件技术,用于将关系数据库的数据映射到对象上,使得开发者可以使用面向对象的方式来处理数据库操作,而无需直接编写SQL语句。ORM框架的主要目标是简化...
10. **设计模式应用**: ORM框架通常会遵循一些设计模式,如工厂模式用于创建数据库连接,代理模式用于实现懒加载等,这有助于保持代码的整洁和模块化。 在Fast.Framework_master.zip这个压缩包中,可能包含了该ORM...
Java自定义的类似ORM的数据库操作框架是一种高效且灵活的数据访问解决方案,...通过阅读和理解这些代码,开发者可以更好地了解如何设计和实现一个自定义的ORM框架,并将其应用到实际项目中,提升开发效率和代码质量。
SQLite3的ORM(Object-Relational Mapping)框架是一种在C++编程中将数据库关系模型与对象模型进行对应的技术。ORM框架使得开发者可以使用面向对象的方式来操作数据库,避免了直接编写SQL语句,提高了开发效率和代码...
本文主要介绍Python使用ORM框架SQLAlchemy操作Oracle数据库。 1. 安装Oracle Instant Client 2. 安装依赖库 使用以下命令来安装SQLAlchemy和cx_Oracle库: pip install SQLAlchemy pip install cx_Oracle 3.创建...
ORM(Object-Relational Mapping,对象关系映射)框架是.NET开发者在处理数据库操作时常用的一种工具,它能够将数据库中的数据与程序中的对象进行映射,使得开发者可以使用面向对象的方式来操作数据库,而无需关心...
**基于ORM的数据库框架Room** 在Android开发中,数据存储是一个关键部分,而Room数据库框架是Google官方推荐的用于Android应用程序的数据持久化解决方案。Room基于对象关系映射(ORM)理念,它允许开发者以更面向...
ORM,全称Object-Relational Mapping,即对象关系映射,是一种编程技术,用于将关系数据库的数据模型映射到面向对象的编程语言中。在现代软件开发中,ORM框架扮演着重要的角色,它使得开发者无需关注底层SQL语句,就...
ORM,全称Object-Relational Mapping,即对象关系映射,是一种编程技术,用于将关系数据库的数据模型映射到面向对象的软件应用中。在.NET环境中,ORM框架可以帮助开发者简化数据库操作,使得开发者可以使用面向对象...
总的来说,封装一个ORM框架需要对数据库操作有深入的理解,同时也需要熟悉面向对象的设计原则。通过这样的封装,可以提高代码的可读性和可维护性,降低数据库操作的复杂度,让开发者能更专注于业务逻辑的实现。
在Spring框架中,数据库访问是核心功能之一,而ORM(对象关系映射)技术则是连接业务逻辑和数据存储的关键桥梁。本篇文章将深入探讨Spring如何实现ORM,主要以JPA(Java Persistence API)和Hibernate为例,同时也会...
ORM(Object-Relational Mapping,对象关系映射)框架是一种编程技术,用于将关系数据库的数据映射到对象上,使得开发者可以使用面向对象的方式来操作数据库,而无需关注底层的SQL语句。它降低了数据访问层的复杂性...
本文将深入探讨如何利用ORM模型设计并实现一个高效、便捷的物资管理系统。 ORM,即对象关系映射,是一种编程技术,它将数据库的表结构映射为程序中的对象,使得开发者可以使用面向对象的方式来操作数据库,降低了...
ORM框架是Java开发中常用的一种技术,它允许开发者以面向对象的方式操作数据库,而无需直接编写SQL语句,极大地提高了开发效率和代码可维护性。 首先,ORM框架的核心思想是将数据库表与Java类进行映射,表中的每一...
在Java开发领域,ORM(Object-Relational Mapping)框架是连接数据库和对象模型的重要工具,它可以将数据库操作转化为面向对象的编程方式,简化了数据库的使用。本项目是一个基于JDK 6.0的自定义ORM框架,旨在通过...
要使用这个ORM框架,开发者需要了解其API设计,包括如何创建数据库连接,如何定义数据模型,如何执行查询,以及如何进行数据的CRUD(Create, Read, Update, Delete)操作。此外,对于多表查询和分页,还需要学习如何...
一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不...
封装了oracle mysql sqllite sqlserver等数据库框架,采用了ORM框架模式。使用起来简单,易用,可以去官方网站查看具体的API