Во-первых, вы предполагаете, что уровень модели обязательно использует какой-то ORM, чтобы абстрагировать SQL.Это не так: вы можете создать слой модели, который слабо связан со слоем Controller, но тесно связан с конкретной СУБД, и поэтому избегайте использования полнофункционального ORM.
Существуют некоторые библиотеки ORMкак Hibernate (Java), NHibernate (.NET), Doctrine (PHP) или ActiveRecord-Rails (Ruby), которые действительно могут генерировать все реальные операторы SQL для вас;но если вы считаете, что ORM не нужен, и вы хотите определить все операторы SQL вручную, не используйте их.
Тем не менее, ИМХО, это действительно НЕ означает, что вы должны просто разместить все своиЛогика, связанная с БД внутри уровня контроллера.Это называется подходом «жирного контроллера», и это путь, который много раз ведет к раздутому, не поддерживаемому коду.Вы могли бы использовать его для простых проектов CRUD, но все, что за этим будет требовать существования настоящей «Модели».
Кажется, вам небезразличен MVC.Пожалуйста, прочитайте также кое-что о TDD.Один мудрец однажды сказал: « устаревший код - это код без тестов ».Когда вы узнаете, что автоматизированные модульные тесты так же важны, как «реальный» код, вы поймете, почему в корпоративном приложении так много уровней и почему ваш уровень модели должен быть отделен от контроллера.Блок кода, который пытается сделать все (представление, бизнес-логика, сохранение данных) просто не может быть легко протестирован (и, между прочим, не отлажен).
Редактировать
«Модель» - это немного нечеткий термин.В зависимости от того, где вы смотрите, это может означать что-то немного другое.Например, программисты PHP e Ruby часто используют его как синоним Active Record , что не совсем точно.Некоторые другие разработчики, похоже, считают, что «модель» - это просто некая модель DTO , что тоже неверно.
Я скорее использую определение модели, как видно из Википедии:
Центральный компонент MVC, модель, фиксирует поведение приложения с точки зрения его проблемной области, независимо от пользовательского интерфейса.Модель напрямую управляет данными, логикой и правилами приложения.
Таким образом, модель является самым большим и самым важным уровнем в большинстве приложений MVC.Вот почему он обычно делится на подуровни: домен, сервис, доступ к данным и т.Модель обычно выставляется через домен, потому что именно там вы найдете методы, которые вызовет ваш контроллер.Но уровень доступа к данным также относится к «модели».Все, что связано с постоянством данных и бизнес-логикой , принадлежит ему.