DDD and MVC: Difference between 'Model' and 'Entity'

Posted by Nathan Loding on Stack Overflow See other posts from Stack Overflow or by Nathan Loding
Published on 2010-06-12T20:12:22Z Indexed on 2010/06/12 20:22 UTC
Read the original article Hit count: 356

Filed under:
|
|
|

I'm seriously confused about the concept of the 'Model' in MVC. Most frameworks that exist today put the Model between the Controller and the database, and the Model almost acts like a database abstraction layer. The concept of 'Fat Model Skinny Controller' is lost as the Controller starts doing more and more logic.

In DDD, there is also the concept of a Domain Entity, which has a unique identity to it. As I understand it, a user is a good example of an Entity (unique userid, for instance). The Entity has a life-cycle -- it's values can change throughout the course of the action -- and then it's saved or discarded.

The Entity I describe above is what I thought Model was supposed to be in MVC? How off-base am I?

To clutter things more, you throw in other patterns, such as the Repository pattern (maybe putting a Service in there). It's pretty clear how the Repository would interact with an Entity -- how does it with a Model?

Controllers can have multiple Models, which makes it seem like a Model is less a "database table" than it is a unique Entity.

So, in very rough terms, which is better?

No "Model" really ...

class MyController {
    public function index() {
        $repo = new PostRepository();
        $posts = $repo->findAllByDateRange('within 30 days');
        foreach($posts as $post) {
            echo $post->Author;
        }
    }
}

Or this, which has a Model as the 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;
        }
    }
}

Both those examples didn't even do what I was describing above. I'm clearly lost. Any input?

© Stack Overflow or respective owner

Related posts about php

Related posts about mvc