数据层新思路,写数据库无关的数据层 ORM在数据库内做更为合适

简介:
一个类对应数据库中的一个或多个表
永远不在应用程序中使用SQL语句
从数据库出来的就是实体信息
ORM在数据库内做更为合适


凡是做软件设计的,都知道我们追求的目标是松耦合的.
就是说,最好是每个层互相之间的关联降低到最低限度.

以下是个人的一些体会,软件设计我们可以这么做

1"获取用户需求
2"界面设计
3"业务实体类设计
4"数据库设计
5"编码

1"获取需求没什么说的

2"界面设计,也没多说的。不过可能这个地方是变化最多、最难的部分。

3"业务实体类设计
这里就是经典的面向对象的分析发挥力量的时候
不考虑任何编码实现,仅从业务实际出发对商业逻辑建模
这个步骤对后期编码的最直接的结果是一堆类图

4"数据库设计
这里是我最想说的部分
凭什么一个类用一张表来映射?
类是我们面向对象分析出来的结果,因此在很多人的实践里已经充分证明类和表不是一对一的关系
并且,如果从大型项目角度出发,从数据库变更角度出发.表结构的变更是迟早的事情.
如果类和表是唯一对应的.那么在数据库表和业务类之间就形成了一种强耦合的结果
即使你用再好的ORM都不能解决这个问题的(难道数据表结构变化后重新映射?注意,即使类分析结果不变,数据库的设计也是很可能会变化的).
ORM的精髓估计不在于简单的将一个表影射成一个类
或者将一个类到数据库里自动生成一个表

推荐的做法是,根据类的实际数据情况,设计数据库的各种表结构
然后.利用数据库的视图以及存储过程等各种数据库工具,提供一个可以被任何软件调用的数据访问接口,这些接口是直接对应面向对象分析后的类图的。
这些接口基本能对应所谓数据持久化的需要.

上面是我第二个特别需要指出的地方,数据库存储过程的使用决策依据.(过几天再具体写)

这个时候,我们已经有了数据库,一个非常好的关系性数据库,并且数据库对外开放了一系列的存储过程及视图,这些东西对外都是按照类分析的结果做的。因此可以非常好的完成对象的信息在数据库内持久化。
今后只要业务对象不发生翻天覆地的变化,那么数据库内的所有一切变化对应用程序来说就是透明的

而这里就是第三个主要猜想,ORM更合适在数据库内完成
数据库内的表从存储过程执行后,从数据库出来的时候,就已经成为基础对象了。

到了这一步,那么在应用程序内就真的实现了完全彻底摆脱数据库的非面向对象的纠缠。
只要简单的进行数据层对象和存储过程的关联就能实现数据库无关。

因为对应用程序来说,和数据库唯一的关系就是存储过程和视图。
除非你要把项目移植到一个不支持这些功能的数据库上。
即使那样,也只需要格外添加一个过滤得层次就足够了
除了要进行连接字符串的配置
应用程序的数据层代码基本是无需修改了
作者: 徐少侠
出处: http://www.cnblogs.com/Chinese-xu/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
如有问题,可以通过 Chinese_Xu@126.com 联系我,非常感谢。

分享家:Addthis中文版

本文转自徐少侠博客园博客,原文链接:http://www.cnblogs.com/Chinese-xu/archive/2007/09/17/896161.html,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
3月前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
91 2
|
22天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
151 61
|
15天前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
20天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
124 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
1月前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
2月前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
2月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
131 3
|
3月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)