DDD и MVC: разница между «моделью» и «сущностью»

Я серьезно озадачен концепцией «Модель» в MVC. Большинство существующих сегодня фреймворков помещают Модель между Контроллером и базой данных, а Модель почти действует как слой абстракции базы данных. Понятие «Толстый Тощий Контроллер Модели» утеряно, так как Контроллер начинает делать все больше и больше логики.

В DDD также существует концепция доменного объекта, который обладает уникальной идентичностью. Насколько я понимаю, пользователь - хороший пример сущности (например, уникальный идентификатор пользователя). У сущности есть жизненный цикл - его значения могут меняться в течение всего действия - и затем он сохраняется или удаляется.

Сущность, которую я описал выше, это то, что я думал, что Model должен быть в MVC? Насколько я вне базы?

Чтобы еще больше загромождать вещи, вы добавляете другие паттерны, такие как паттерн репозитория (возможно, размещая там Сервис). Довольно ясно, как хранилище будет взаимодействовать с сущностью - как это происходит с моделью?

Контроллеры могут иметь несколько Моделей, поэтому создается впечатление, что Модель - это не столько «таблица базы данных», сколько уникальная сущность.

ОБНОВИТЬ: В этом посте Модель описывается как нечто со знанием, и она может быть единичной или совокупностью объектов. Так что это звучит больше как сущность и модель более или менее одинаковы. Модель - это всеобъемлющий термин, в котором сущность является более конкретной. Объект значения также будет моделью. По крайней мере, с точки зрения 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;
        }
    }
}

Оба эти примера даже не делали то, что я описывал выше. Я явно потерян. Любой вклад?

Ответы на вопрос(1)

Ваш ответ на вопрос