数据库建模与面向对象建模

    软件开发的过程伴随着分析、设计、编程、调试、部署和运行阶段;在分析和设计的阶段又有两种基本的建模范式来表达客观世界,一种是面向对象,另外一种是基于数据库的实体关系来表达。

    面向对象与数据库建模本身是矛盾的,基于面向对象设计的模型与基于数据库建模设计的模型本身是不匹配的,我们无法用数据库的方式去更好的描述面向对象模型。
    数据表是类似面向对象中的“类”,也是一种表达客观世界的基本单元,表有多列字段,表的字段是保存数据的,每个字段有数据类型。 注意,这里没有数据的封装和公开,表的字段是赤裸的,只要有数据库访问权限,任何人都可以访问,没有结构层次关系, 都是扁平并列的;也没有面向对象中的层次和封装的表达,这说明数据库实体的表达本身并没有做到直观的描述客观世界

    数据库实体的行为是通过其约束或者触发器等来描述,但他更像一些规则;实体之间的关系是通过1:1或1:N的形式来表达,这种关系无法准确的表达关系的性质如紧密程度;

    综上,数据库建模的方式是很难表达对象模型的内涵,对象的封装,继承,多态等等;很难用实体关系来进行表达。    

    可是话又说回来了,两种建模范式是不匹配;但是我们应该以什么样的方式来构建我们的程序?如果在分析阶段我们侧重以数据库库建模的方式,那么我们的编码很有可能呈现出过程式的编码方式;自底向上设计,自顶向下编码,这种过程式的编码不能很好的应对复杂的软件系统工程。如果我们一开始就以OO的方式设计,那我们的编码就是OO的,至于持久化,我们可以借助ORM这种中间件来解决类似的ORM框架有很多如:hibernate

    对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

ORM方法论基于三个核心原则:

  •     简单性:以最基本的形式建模数据。
  •     传达性:数据库结构被任何人都能理解的语言文档化。
  •     精确性:基于数据模型创建正确标准化了的结构。

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。O/R中字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。

当开发一个应用程序的时候(不使用O/R Mapping),可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。

        

转载于:https://my.oschina.net/wii01/blog/894637

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值