我在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的对象:)))
由于
答案 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确实是一个坏主意,定义这种未经过删除的过度复制/粘贴函数会直接影响可维护性等。