对象工厂问题 - 使用数据库查询信息来创建对象

时间:2010-09-27 21:31:11

标签: database design-patterns object factories

我有几个对象,比如产品,订单等。当我从数据库中获取信息时,我会连续创建一种对象类型。然后我使用创建的对象。我读到这个叫做工厂。

这样做有什么好处吗?特别是像PHP这样的松散类型的语言?

由于

编辑:这是我获得数据库不可知性的地方吗?这是ORM本质上的作用吗?

2 个答案:

答案 0 :(得分:1)

通过从数据库查询创建对象,您将定义对象与关系数据库之间的映射。这正是ORM软件所做的。

通过这样做并确保您的对象永远不会直接访问数据库,而是使用数据库访问函数/对象,您可以通过两种方式保护代码免受更改:

  • 对数据库架构的更改不会影响您的代码。相反,代码更改将仅位于数据库访问对象中。

  • 您可以通过实现与原始接口相同的新数据库层来切换到不同的DBMS。您的其他对象不需要更改。

我想从这个意义上说,你获得了一些与数据库无关的功能,但是你可能最好还是使用一个开箱即用的数据库库。

在我看来,优势在于您正在使用对象并获得面向对象语言提供的所有优势。然后,您可以在更高级别(根据已定义的对象)读取域逻辑,而无需筛选数据库查询。自己编写ORM可能很难,但有一些工具可以帮助解决这个问题。

这是我通常采用的路线,但我没有进行任何PHP开发,所以我不能说它对该语言有多好。

答案 1 :(得分:0)

您所描述的是数据访问层的实现 - 它听起来不像Factory Method pattern的示例,也不是Abstract Factory pattern

是的,ORM弥合了从对象到关系数据库的差距,可以作为您的数据访问层。请记住,您使用的任何ORM都有某些优点/缺点/限制。根据您的经验和要求,编写自己的数据访问层有时是一个好主意;不觉得你必须使用第三方ORM。

是的,良好的数据访问层可以轻松更换存储机制(不同的数据库,XML,平面文件等),而无需更改业务逻辑,UI或其他代码。

无论是松散类型还是强类型语言,如果您使用的是OO语言,使用数据对象(由ORM或自行开发的数据访问层提供)编写代码会更容易。我确信可以编写一个没有数据访问层的系统,您的业务层可以直接与数据库配合使用。但实施和维护可能更具挑战性。