Я серьезно запутался в концепции «Модель» в MVC.Большинство существующих сегодня фреймворков помещают Модель между Контроллером и базой данных, а Модель почти действует как слой абстракции базы данных.Понятие «Толстый Тощий Контроллер Модели» теряется, когда Контроллер начинает выполнять все больше и больше логики.
В DDD также существует концепция Доменного Сущности, которая имеет уникальную идентичность.Насколько я понимаю, пользователь - хороший пример сущности (например, уникальный идентификатор пользователя).У сущности есть жизненный цикл - его значения могут изменяться в течение всего действия - и затем он сохраняется или удаляется.
Сущность, которую я описал выше, - это то, что, как я думал, должна быть модель в 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;
}
}
}
Оба эти примера даже не делали то, что я описывал выше.Я явно потерян.Любой вход?