【发布时间】:2012-04-05 14:39:59
【问题描述】:
我有一个数据模型对象User。例如,我的应用程序还有一些其他数据模型对象,Fork 和 Options。用户有分叉和分支。我的应用程序必须使用用户/叉子/选项等信息的某种组合运行大量查询。例如,您可以看到一个用户分叉页面。这将需要在 Forks 上加入该用户(例如会话中的登录用户)的查询。
我不想违反得墨忒耳法则,而且我通常也反对一般的 getter(和 setter),所以我不想实现 User::getID() 或 User::getUsername()。
但是,对我来说,替代方案似乎并没有好多少。最终发生的是我在User 中实现了各种方法来运行这些查询(例如User::getForks())。一般来说,这是可行的,但 User 类已经变得单一,这有其自身的坏处。
更重要的是,我不确定如何解决对两个数据模型对象的查询。例如,我可以有一个带有 id 的 User 和一个带有 id 的 Fork 并且想要检查分叉是否属于用户。这要求 Fork 将其 id 暴露给用户,User 将其 id 暴露给 Fork,或者两者都将它们的 id 暴露给控制器(或其他任何东西)。这些似乎都不是可取的,我不确定该选择哪个。我还缺少其他选择吗?
在另一个类似的步骤中,我不确定向视图添加信息的最佳方式。我有一个视图对象,通常我使用像User::addForksToView(View $view) 这样的方法,它将运行一个或多个查询并进行一些处理,但这也增加了User 的大小和责任。我认为这是一个类似的问题。
【问题讨论】:
标签: php mysql model-view-controller law-of-demeter