代码之家  ›  专栏  ›  技术社区  ›  johnny

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

  •  0
  • johnny  · 技术社区  · 14 年前

    我有几个对象,如产品、订单等。当我从数据库中获取信息时,我会提取一行并创建一种对象类型。然后我处理创建的对象。我听说这叫做工厂。

    这样做有什么好处吗?尤其是在像php这样的松散类型语言中?

    谢谢

    编辑:这是我得到数据库不可知性的地方吗?ORM本质上就是这样做的吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Michael Venable    14 年前

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

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

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

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

    我想从这个意义上说,您获得了一些数据库不可知性,但是您最好使用一个现成提供不可知性的数据库库。

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

    这是我通常采用的方法,但我不做任何PHP开发,所以我不能说它在该语言中的应用有多好。

        2
  •  0
  •   mikemanne    14 年前

    您所描述的是一个数据访问层的实现——听起来不像 Factory Method pattern ,也不 Abstract Factory pattern .

    是的,ORM在对象和关系数据库之间架起桥梁,可以作为数据访问层。请记住,您使用的任何ORM都有一定的优点/缺点/局限性。根据您的经验和要求,编写自己的数据访问层有时是一个好主意;不要觉得必须使用第三方ORM。

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

    不管使用的是松散类型或强类型语言,如果您使用的是OO语言,那么使用数据对象(由ORM或内部数据访问层提供)编写代码会容易得多。我确信可以编写一个没有数据访问层的系统,在这个系统中,业务层直接与数据库一起工作。但实施和维护可能更具挑战性。