Я серьезно запутался в концепции "Модели" в MVC. Большинство существующих в настоящее время фреймворков помещают модель между контроллером и базой данных, а модель почти действует как слой абстракции базы данных. Концепция "Fat Model Skinny Controller" теряется, поскольку контроллер начинает все больше и больше логики.
В DDD существует также понятие Domain Entity, которое имеет для него уникальный идентификатор. Насколько я понимаю, пользователь - хороший пример Entity (например, уникальный идентификатор пользователя). Сущность имеет жизненный цикл - значения могут меняться в течение всего действия, а затем сохраняются или отбрасываются.
Сущность, описанная выше, - это то, что я думал, что модель должна находиться в MVC? Как вне базы я?
Чтобы загромождать вещи больше, вы бросаете другие шаблоны, такие как шаблон репозитория (возможно, размещая там Сервис). Это довольно ясно, как Repository будет взаимодействовать с Entity - как это происходит с моделью?
Контроллеры могут иметь несколько моделей, что делает его похожим на модель, которая меньше "таблица базы данных", чем уникальная сущность.
ОБНОВЛЕНИЕ: В этом сообщении Модель описывается как что-то со знанием, и она может быть сингулярной или сбор объектов. Так что это больше похоже на сущность и модель, более или менее одинаковые. Модель является всеохватывающим термином, где сущность более конкретна. Объектом Value также будет модель. По крайней мере, с точки зрения 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;
}
}
}
Оба этих примера даже не делали то, что я описывал выше. Я явно потерян. Любой вход?