【发布时间】:2011-01-27 22:23:38
【问题描述】:
我正在使用 CodeIgniter 构建一个站点,并且我有一个名为 Blog_model 的模型。
在Blog_model 中,有一些方法可以拉取特定主题的帖子列表,例如getPopularPosts()。
getPopularPosts() 查询posts 表以获取topic_id 与指定的匹配的帖子列表,并按受欢迎程度对其进行排序。因此,这是对整个帖子表的查询(假设最终这将非常大)以查找所有带有 topic_id x 的帖子。
然后,foreach 结果 as 一个单独的帖子 ID,它创建一个新的 Post 对象。 Post 类通过设置字段id 来构造一个帖子。
为了返回Post 的内容,我指定$post->getPost();,它再次查询posts 表以返回给定id 的整行。
这个组织(AFAIK)遵循一个很好的面向对象原则。但是现在,对于每个帖子(再次,假设有数千、数百万,等等),我必须首先查询ids 的列表,然后再次获取每个帖子的内容。如果我返回 30 个帖子,这意味着 31 个单独的查询。
或者,我可以打破面向对象的模式并为posts 中的每个帖子拉*,其中topic_id = x。然后,我有一个查询返回所有 30 个帖子,但现在我感觉不是那么面向对象。
怎么办?
【问题讨论】:
-
你觉得“感觉如此面向对象”很重要吗? - 如果您担心性能或其他问题,您可以在后端运行它作为完整的 oo 更改并将结果写入纯文本文件。然后您甚至不需要为每个帖子运行查询,您只需使用初始查询中的 id 即可显示缓存文件中的结果。但是,如果您正在寻找选择您提到的选项之一的评论,我会使用联合查询。如果我没记错的话,代码点火器并不是严格意义上的oo。我认为是 Kohana,他们有 ORM 来做你想做的事。
-
如果它有所作为,那就是 CodeIgniter 2。
-
您的问题中有很多信息,如果您希望在此处正确解决这些问题,请给出您所讨论内容的代码具体示例。
标签: database oop model-view-controller design-patterns codeigniter