面向对象建模方法与数据库建模方法的比较

咱们知道:软件开发通常分为五个阶段:分析、设计、编程、调试、部署和运行。html

 

编程阶段咱们一般采用Java/.NET这样面向对象的 语言,使用面向对象的语言能够为咱们带来不少设计上的好处。不过好多时候,在开发过程当中咱们会错误的使用面向对象语言,具体的表现就是用面向对象的语言来 编写过程式的代码。咱们开发软件就是将现实世界的东西对应到计算机世界中,如何作好现实世界与计算机世界间的映射,是判断软件产品好坏的标准。目前,将需求从客观现实世界映射到计算机软件世界主要有两种方式:传统的数据库分析设计面向对象建模(object-oriented class model)程序员


在 分析阶段,采用哪一种建模方式决定了后面编程阶段的编程特色。若是以数据表为核心进行分析设计,也就是根据需求首先获得数据表名和数据字段,接下来的编程工 做只须要咱们学会sql语句操做这些数据表,软件中的活动就是数据表先后顺序的操做(具体的操做就是crud),必然咱们的代码会成为过程式的代码。算法

相反,在分析阶段,咱们根据需求采用面向对象建模的方法,那么咱们使用面向对象的语言,再加上框架的辅助,就很瓜熟蒂落走上OO编程风格。sql

下面咱们来看看两种建模方法是如何来表达客观世界的。数据库

 

面向对象的模型(Class Model)编程

 

面向对象模型的核心:类、对象、关系安全

 

类与对象数据结构

 

类(class)是一种面向对象计算机编程语言的构造,是建立对象的蓝图,描述了所建立的对象共同的属性方法。类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类的概念对象的概念是紧密交织在一块儿的,对象是存在于时间和空间中的具体的实体,而类仅表明一种抽象,即一个对象的“本质”框架

 

类的关系编程语言

 

类与类的关系其实就是对象间的关系,具体的关系有:依赖、依赖、聚合、组合

具体的关于对象的关系和数据库的关系能够参看文章:领域驱动设计之model的关系及ef建模

面向对象模型遵循的基本原则有:抽象、封装、模块化以及层次原则等

 

抽象

 

抽象是处理现实世界复杂性的最基本方式在OO方法中它强调一个对象和其余对象相区别的本质特性对于一个给定的域肯定合理的抽象集是面向对象建模的关键问题之一

 

封装

 

封装是对抽象元素的划分过程抽象由结构和行为组成封装用来分离抽象的原始接口和它的执行

封装也称为信息隐藏Information Hiding它将一个对象的外部特征和内部的执行细节分割开来并将后者对其余对象隐藏起来

 

模块化

 

模块化是已经被分为一系列汇集的和耦合的模块的系统特性对于一个给定的问题肯定正确的模块集几乎与肯定正确的抽象集同样困难一般每一个模块应该足够简单以便可以被完整地理解

 

层次

 

抽象集一般造成一个层次,层次是对抽象的归类和排序。在复杂的现实世界中有两种很是重要的层次一个是类型层次另外一个是结构性层次 。肯定抽象的层次是基于对象的继承,它有助于在对象的继承中发现抽象间的关系,搞清问题的所在理解问题的本质

 

数据库模型(Database Model 传统E-R模型 )

 

好了,下面咱们谈论关系数据表模型,之前咱们朴素的分析设计都是根据需求直接创建数据表的方式来进行的,为何称为朴素, 是由于咱们好像只有数据结构 算法方面的知识,也认为只有这样作才叫作软件。 那么既然这条路可以走出来,咱们看看这个领域是如何映射客观世界的。

 

数据表因为技术提供庞大数据存储和可靠的数据访问,正在不断从技术领域走向社会领域,不少不懂计算机的人 也知道须要创建数据库来管理一些事务,可是不表明咱们就必须围绕数据库的分析设计。

 

数据表是相似前面的“类”,也是一种表达客观世界的基本单元,表有多列字段,表的字段是保存数据的,每一个字段有数据类型。 注意,这里没有数据的封装和公开,表的字段是赤裸的,只要有数据库访问权限,任何人均可以访问,没有结构层次关系, 都是扁平并列的

 

数据表也有一些行为,这些行为是基于实体的一些规则:

 

约束(Constraints) 可以保证不一样表字段之间的关系完整安全性,保证数据库的数据安全。

 

触发器(Triggers)提供了实体在修改 新增和删除以前或以后的一些附加行为,

存 储过程(Database stored procedures)提供数据专有的脚本性语言,存储过程象一个数学公式虽然具备抽象简洁美学,可是这种简洁是闷葫芦美学,不是大众美学,只有公式存储 过程发明者本身了解精通,别人没法插手,软件不是科学,不是比谁智商高,科研水平高,软件是人机工程,更讲究集体,讲究别人是否方便与你协同扩展软件。

 

关 系数据表的遍历访问是经过列字段遍历或表join等方式实现,SQL语句是这样标准语言, 只要会写SQL语句,就能访问那些失去层次,失去客观世界特征的苍白的数据,这样的系统可以多少真实 反映客观需求,是有问号的?SQL语句是否方便修改,是否经得起频繁修改而不出错,都是有疑问的地方,是否 SQL语句越复杂,修改越快,或者另一个程序员可以很快修改不是本身写的SQL语句,这些都是问题所在。

 

数据表关系

 

数 据表的关系主要是经过外健或专门关联表来表达的,这种关系虽然能够反映1:1或1:N这样关系,可是没法 表达关系的性质,是紧密组成关系式的关联,仍是可有可无的普通关系,正由于如此,使用数据表分析设计时, 咱们会有蜘蛛网的关系表,这些关系因为在后期没法分辨性质,没法进行整理,增长了系统复杂性。

 

更重要的是:分析就是对一个可能陌生领域进行 探寻,若是使用数据表的分析设计方法,那么咱们实际就是 在陌生领域中寻找数据表这样一个形式,那么有可能产生误判断,将一个实则是表达关系的东东误认为是一个实体表, 由于关系表必然带来关系,这样,就必然产生蜘蛛网式的数据表模型,将简单问题复杂化。

 

两种建模方法对应的模型


面向对象建模的方法在开发过程当中使用领域驱动设计的方法开发更为友好


传统的数据库分析设计的方法咱们在开发过程当中更多的使用贫血模型

相关文章
相关标签/搜索