面向对象设计中的数据库?

时间:2014-01-28 07:06:03

标签: oop object-oriented-analysis

数据库在哪里适合面向对象的设计?让我们说例如我有一个简单直接的文章数据库,我的用例图有搜索文章的场景,查看文章和创建文章。

我是否应该有一个与类中的数据库连接的文章类,或者只是一个全局数据库类,以便其他类说用户类可以访问同一个连接?

我是否应该使用表格作为对象,例如文章是它自己的数据对象,然后像ArticleApi这样的类用于CRUD操作?

另外,如果有人有任何从头到尾的面向对象的分析和设计教程,那就太好了。

对于这样一个新手问题我很抱歉,我来自程序编程实践,并试图进入软件开发的面向对象部分。

2 个答案:

答案 0 :(得分:2)

您没有指定任何特定平台,因此它不会是一个非常准确的答案。

  

数据库在哪里适合面向对象的设计?

我想我们正在谈论RDBMS,对吗?好吧,他们没有。这就是我们需要ORM software的原因,例如Hibernate for JavaDoctrine for PHP

  

我是否应该有一个带有与类中数据库连接的文章类,或者只是一个全局数据库类,以便其他类说用户类可以访问同一个连接?

     

我是否应该使用表格作为对象,例如文章是它自己的数据对象,然后像ArticleApi这样的类用于CRUD操作?

ORM架构基本上有两种常用方法:

  • Data Mapper,您的域对象只是普通的对象,不依赖于ORM /数据库。您应该以OO方式为模型建模,然后将其映射到数据库中。你有一组独立的对象(EntityManagers)来处理实际的持久性。
  • Active Record,您的域对象与ORM紧密耦合,并且它们自己提供一组方法来处理与数据库相关的操作。

在我个人看来,数据映射器方法优于活动记录,因为它遵循SOLID原则。但积极的记录也可能非常有用。


您通常应该记住,您的域模型(面向对象)和数据库模型(rdbms)是两个不同的东西,必须使用不同的指南建模。

答案 1 :(得分:0)

没有一个正确答案 - 全部取决于您正在构建的应用程序。对于最简单的应用程序,您可以使用Transaction Script方法(这是非常程序化的)。

然后你可以演变为Table Module - 方法,它为数据库中的每个表使用类,该类负责管理表中的所有数据。

对于更复杂的应用程序,您将拥有Domain Model(通常甚至在您拥有数据库之前)。您需要Data Mapper将您的域模型类映射到数据库中的表(您可以将单个类映射到多个表,反之亦然)。随着现代Object Relational Mappers使用领域模型的力量变得更加容易,因为这种映射的大部分内容是自动完成的。 .NET中的Entity Framework等工具甚至允许您从数据库表生成域模型。