我有几个对象,例如产品,订单等。当我从数据库中获取信息时,我会行并创建一种类型的对象。然后,我与创建的对象一起工作。我读到这就是工厂。

这样做有一些优势吗?特别是在像PHP这样的松散类型语言中?

谢谢

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

有帮助吗?

解决方案

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

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

  • 对数据库架构的更改不会通过您的代码涟漪。相反,代码更改仅位于数据库访问对象中。

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

我想从这个意义上讲,您会获得一些数据库 - 不平衡性,但是使用数据库库,您可能会更好地使用该数据库库,该数据库库可以开箱即用。

我认为,优势是您正在使用对象并获得面向对象的语言提供的所有优势。然后,您可以在较高级别(就所定义的对象而言)读取域逻辑,而无需筛选数据库查询。自己写ORM可能很艰难,但是有一些工具可以帮助您。

这是我通常采取的路线,但我不做任何PHP开发,因此我不能说它适用于该语言。

其他提示

您要描述的是数据访问层的实现 - 听起来不像 工厂方法模式, ,也不是 抽象的工厂模式.

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

是的,一个好的数据访问层使您可以轻松地交换您的存储机制(不同的数据库,XML,Flat Files等),而无需更改业务逻辑,UI或其他代码。

无论您使用宽松的语言或强型语言,如果您使用OO语言工作,使用数据对象(由ORM或Homegrown Data Access Layer提供)编写代码会更容易。我敢肯定,可以编写一个没有数据访问层的系统,而您的业务层直接与数据库一起使用。但是实施和维护可能会更具挑战性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top