对象工厂问题 - 使用数据库查询信息创建对象
我有几个对象,例如产品,订单等。当我从我的数据库中获取信息时,我会占用一行并创建一种对象类型。然后,我会处理创建的对象。我读到这叫做工厂。对象工厂问题 - 使用数据库查询信息创建对象
这样做有一些好处吗?特别是像PHP这样的松散类型的语言?
谢谢
编辑:这是我得到数据库不可知论?这是一个ORM实质上做什么?
通过从数据库查询创建对象,您正在定义对象和关系数据库之间的映射。这正是ORM软件的功能。
通过这样做,并确保你的对象不能直接访问数据库,而是用你的数据库访问函数/对象,你是保护从改变你的代码在两个方面:
更改您的数据库模式不会影响你的代码。相反,代码更改将仅位于数据库访问对象中。
您可以通过实施与原始接口相同接口的新数据库层来切换到不同的DBMS。您的其他对象不需要更改。
我在这个意义上猜,你获得一些数据库agnosticity,但你会使用数据库库,提供agnosticity开箱可能会更好。
在我看来,优点是你正在处理对象并获得面向对象语言提供的所有优点。然后,您可以在更高级别(根据您定义的对象)读取域逻辑,而无需筛选数据库查询。自己编写ORM可能很困难,但有些工具可以帮助实现这一点。
这是我通常采用的路线,但我没有做任何PHP开发,所以我不能说它适用于该语言的效果如何。
您所描述的是数据访问层的实现 - 它听起来不像Factory Method pattern或Abstract Factory pattern的示例。
是的,ORM弥补了从对象到关系数据库的差距,并且可以充当您的数据访问层。请记住,您使用的任何ORM都有一定的优点/缺点/局限性。根据您的经验和要求,编写您自己的数据访问层有时是一个好主意;不觉得你必须使用第三方ORM。
是的,一个好的数据访问层可以轻松地在不改变业务逻辑,UI或其他代码的情况下更换存储机制(不同的数据库,XML,平面文件等)。不管松散类型还是强类型语言,如果您使用的都是OO语言,使用数据对象(由ORM或本地数据访问层提供)编写代码会容易得多。我相信可以编写一个没有数据访问层的系统,其中业务层直接与数据库一起工作。但实施和维护可能会更具挑战性。
一个优势,而不是什么? – 2010-09-27 21:33:02
只是使用SQL查询来恢复信息并立即使用它。我知道,把所有东西都当作对象看起来不错,但我看不出为什么我会这样做。 – johnny 2010-09-27 21:35:31