【问题标题】:Is it OK to embed database object?嵌入数据库对象可以吗?
【发布时间】:2011-08-01 15:26:05
【问题描述】:

我有以下数据表:users、user_pictures、messages、forum。概述它的结构:

forum
users
 user_pictures
 messages

因为如果没有用户,则没有 user_pictures 也没有消息。现在我想在我的类中构建这种结构化逻辑。我为每个表使用一个独立的类来根据表执行操作。通常它看起来像这样:

$forum = new Forum();

$users = new User();

$messages = new Message();

$user_pictures = new User_picture();

但是如果我在用户的构造函数中创建消息和 user_pictures 会怎样?它的参考也会在那里。可以吗?

【问题讨论】:

  • 对我来说,您的意思是从逻辑上讲,user_picturesmessages 都归 users 所有,而您是在问构建 OOP 是否合理相应地,这些对象......准确吗?
  • 您的每个独立类中有什么,您能否举例说明如何使用它们。我会说你可以在需要的地方创建实例......

标签: php database oop class


【解决方案1】:

但是如果我在用户的构造函数中创建消息和用户图片呢?

你不应该在 ctor 中创建 任何东西。这将在 ctor 中工作,并且还将创建图与合作者图混合。如果要组装复杂的对象图,请使用 Builder 或 Factory 模式。如果您需要协作者中创建某些东西,请将工厂或构建器的实例传递给协作者。 But dont do work in a constructor.

至于您问题的其余部分:can be answered the same as your previous question。使用自定义 DataMapper 和/或 Repository 和/或 ORM。不要按照你的 RDBMS 结构来建模你的类。

【讨论】:

  • 不仅仅是因为测试。 +1
【解决方案2】:

您的逻辑将取决于 $messages 和 $user_pictures 的真正含义。它们是仅针对该用户的消息和图片,还是论坛的?

如果是第一种情况,那么 $messages 和 $user_pictures 应该是 $user 的子类,因为它们与该类相关联。如果是后者,那么他们应该子类 $forum。如果它们不相关,那么它们都应该是它们自己的类。

如果你要用 $messages 和 $user_pictures 子类 $users,我会在用户对象上创建一个方法来访问这些子类。类似于 $user->get_messages 来获取与该用户关联的消息,对于用户图片也是如此。

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2011-02-19
    • 1970-01-01
    • 2012-08-05
    • 2010-11-20
    相关资源
    最近更新 更多