【发布时间】:2011-03-03 01:52:43
【问题描述】:
我对 MVC 中的“模型”概念感到非常困惑。当今存在的大多数框架都将模型放在控制器和数据库之间,模型几乎就像数据库抽象层一样。随着控制器开始执行越来越多的逻辑,“Fat Model Skinny Controller”的概念就消失了。
在 DDD 中,还有一个域实体的概念,它具有唯一的身份。据我了解,用户是实体的一个很好的例子(例如,唯一的用户 ID)。实体有一个生命周期——它的值可以在整个操作过程中发生变化——然后它被保存或丢弃。
我上面描述的实体是我认为模型应该在 MVC 中的吗?我离基地有多远?
为了让事情变得更加混乱,您可以使用其他模式,例如存储库模式(可能会在其中放置一个服务)。存储库如何与实体交互非常清楚——它如何与模型交互?
控制器可以有多个模型,这使得模型看起来与其说是一个“数据库表”,不如说是一个独特的实体。
更新: In this post 模型被描述为具有知识的东西,它可以是单数或对象的集合。所以听起来更像是实体和模型或多或少相同。模型是一个包罗万象的术语,其中实体更具体。值对象也可以是模型。至少在 MVC 方面。也许???
那么,粗略地说,哪个更好?
真的没有“模型”......
class MyController {
public function index() {
$repo = new PostRepository();
$posts = $repo->findAllByDateRange('within 30 days');
foreach($posts as $post) {
echo $post->Author;
}
}
}
或者这个,有一个模型作为DAO?
class MyController {
public function index() {
$model = new PostModel();
// maybe this returns a PostRepository?
$posts = $model->findAllByDateRange('within 30 days');
while($posts->getNext()) {
echo $posts->Post->Author;
}
}
}
这两个例子都没有达到我上面描述的效果。我显然迷路了。有什么意见吗?
【问题讨论】:
标签: php model-view-controller model domain-driven-design entity