dao模式和关系

时间:2011-06-24 12:08:29

标签: php design-patterns dao

我在PHP中使用DAO模式。我理解以这种方式分离模型所带来的好处,但我不明白的是当你的表通过关联实体相关时,你应该如何构建DAO和VO

我举一个例子:

在我的数据库中我有

USERS(id,username);

USERS_POSTS(id_user(FK),id_post(FK));

POSTS(id, title);

USER_COMMENTS(id_user(Fk),id_post(FK));

COMMENTS(id, text);

我使用相应的setter和getter创建 UserVO PostVO ,然后使用 UserDAO PostDAO 来管理SQL最终归还了VO。 对来自这些表的数据执行CRUD操作非常简单,但是当您开始考虑关联表并检索跨不同表的数据时,您开始认为使用DAO不再那么简单......

如果您想要返回文章作者的所有评论,您将如何组织DAO模式?我不需要SQL查询我只是将此作为实际情况的一个例子......

我读到每个关联表都有关联的DAO和Vo是个好主意。 它的VO会包含什么?只有2个外键或来自两个表的所有属性?

如果逻辑具有关联实体的DAO和VO,那么如果查询“通过”超过3个表(使用2个关联实体),那么解决方案是什么?

我怀疑DAO模式会有一个名为users_posts_comments_article的对象:)))

由于

2 个答案:

答案 0 :(得分:1)

您自己想要获得哪种数据,并编写一个提供该数据的图层。不要考虑调用连接两个以上表的类的内容。 您正在考虑将表格转换为模型,并且您可能正朝着不适合您项目的方向前进。由于我不知道你的项目有多大,我不知道这是否合适。

这是一篇肯定会给你一些思考的文章:http://weierophinney.net/matthew/archives/202-Model-Infrastructure.html

引用那篇文章(他指的是Domain Models):

  

当你用这些术语思考时,你   开始打破你的系统   你需要的离散件   操纵,以及如何   每件作品都与其他作品有关。这个   运动类型也可以帮助你停止   从你的角度思考你的模型   数据库表;相反,你的   数据库成为容器   从一次使用中保留哪些数据   你的模型到下一个。你的模特   相反是一个可以做的对象   传入或存储的东西   数据 - 甚至完全   自主。

答案 1 :(得分:0)

保持简单,s。 DAO或任何哲学或任何东西只能对某个限制有意义。

恕我直言,如果你想要抽象,只需要简单的getitem('class',$ conditions)或获得相关($ pathandconditions,$ itemconditions),这对博客这么简单的事情来说是浪费时间。 / p>

这种东西绝对涵盖了基本sql使用的所有需求。

getUsersWhoHaveAFrigginLongMethodNameofDoom确实是一个坏主意,定义这种未经过删除的过度复制/粘贴函数会直接影响可维护性等。