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

3
数据库在面向对象设计中的应用是什么?例如,我有一个简单的文章数据库,我的用例图包括搜索文章、查看文章和创建文章的情景。
我应该将文章类与其连接到数据库的类结合起来,或者只使用全局数据库类,以便其他类(如用户类)可以访问相同的连接?
另外,我应该将表格作为对象,例如将文章作为独立的数据对象,然后再有一个ArticleApi类来进行CRUD操作吗?
如果有人有任何从头到尾的面向对象分析和设计教程,那就太好了。
对不起,这是一个初学者的问题。我来自过程式编程实践,并试图进入软件开发的面向对象部分。
2个回答

4

您没有指定任何特定的平台,因此答案可能不太准确。

数据库在面向对象设计中的位置是什么?

我想我们谈论的是RDBMS,对吧?那么它们并不适用于面向对象设计。这就是为什么我们需要ORM软件,例如Java的HibernatePHP的Doctrine

我应该拥有一个带有与类内部数据库连接的文章类,还是只有一个全局数据库类,以便其他类(如用户类)可以访问相同的连接?

此外,我应该将表格用作对象,例如文章作为其自己的数据对象,然后使用ArticleApi类进行CRUD操作吗?

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

  • 数据映射器(Data Mapper),其中您的领域对象只是纯粹的对象,没有任何依赖于ORM/数据库。您应该以面向对象的方式对模型进行建模,然后将其映射到数据库中。您有一个单独的对象集(EntityManagers)用于处理实际的持久化。
  • 活动记录(Active Record),其中您的领域对象与ORM紧密耦合,并提供了一组自己的方法来处理与数据库相关的操作。

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


您应该牢记,您的领域模型(面向对象)和数据库模型(关系型数据库管理系统)是两个不同的东西,需要使用不同的指南进行建模。


1
我现在真想抱抱你,非常有用的信息,没错,我说的是关于关系型数据库MySQL的。 - Philip Rollins
@Crozin,我可以确认一下吗?您是建议将应用程序的数据作为一个RDBMS数据库使用ERD数据模型单独设计和构建,然后使用ORM将OO设计的应用程序映射到数据库中吗?难道没有其他方法吗? - AJF
@AJF 是的,如果你正在处理非平凡系统,这通常比尝试合并这两个不同的模型更有益。 - Crozin
@Crozin 感谢回复。同意非平凡的观点,如果系统足够简单,可以将类映射到表中,否则需要另一层操作。那 LINQ 呢? - AJF

1

没有单一正确的答案 - 一切取决于您正在构建的应用程序。对于最简单的应用程序,您可以使用事务脚本方法(相当过程化)。

然后,您可以演变为表模块 - 这种方法为数据库中的每个表使用类,并且该类负责管理来自表的所有数据。

对于更复杂的应用程序,你将需要领域模型(通常甚至在你有数据库之前)。你还需要数据映射器将你的领域模型类映射到数据库中的表格(你可以将单个类映射到多个表格,反之亦然)。利用现代对象关系映射器的强大功能,使用领域模型变得更加容易,因为大部分映射都是自动完成的。一些工具,如.NET中的Entity Framework,甚至允许你从数据库表格生成领域模型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接