Я думаю, что, возможно, вы увязли в особенностях реализации.
Мое понимание (общего) MVC следующее:
- нужно проделать определенную работу
- контроллер определяет, как выполняется эта работа и как она представляется
- контроллер [делает что-то], что в конечном итоге вызывает обработку модели для выполнения
- процессы модели обрабатывают всю обработку данных: получение данных из [где-то], применение бизнес-логики, а затем размещение результатов [где-то]
- Затем контроллер [делает что-то], что в конечном итоге вызывает обработку представления, и использует систему обработки представления данных из модели
- процессы представления получают ожидаемые данные и представляют эти данные каким-либо образом.
Это нарочно очень абстрактно.
Я думаю, что пример в документации MG реализует это соответствующим образом, хотя пример довольно надуманный. Контроллер вызывает модель, которая обрабатывает данные (входные данные преобразуются в выходные данные), а затем устанавливает результат. Затем контроллер вызывает представление, которое берет данные и отображает их.
Я не согласен с предпосылкой этого вопроса "Используя MVC, как мне спроектировать представление так, чтобы оно не требовало знания переменных, устанавливаемых контроллером?" Представление не должно заботиться о том, откуда берутся данные, оно должно просто знать, какие данные ему нужны, и извлекать их откуда-то. Где-то в системе должно быть соглашение о том, что модель помещает данные для использования куда-то, и представление получает необходимые данные откуда-то (в противном случае, как это могло бы работать?); разъединение состоит в том, что модель просто помещает данные туда, где им было сказано, а представление просто выводит данные из того места, где им было сказано. Контроллер (или соглашение используемой системы MVC) определяет, как это реализовано. Я не думаю, что MG нарушает какие-либо принципы MVC так, как он это обрабатывает.
Что касается этого утверждения: «В этом случае PigLatinTranslator - это просто класс, который находится где-то и не может рассматриваться как модель, контроллер или представление». Ну ... да ... вся модель - это какой-то код. Таким образом, PigLatinTranslator.cfc моделирует бизнес-логику здесь.
И этот: «В одном из ответов было упомянуто, что« модель »в MVC должна быть объектом, который контроллер заполняет данными, которые затем передаются в представление» ... Я не думаю, что это правильно. Контроллер просто определяет, какие модели и какие представления необходимо вызвать, чтобы выполнить требование, и возможные обмены данными между ними (хотя это также может быть сделано по соглашению). Контроллер не выполняет обработку данных; он решает, какую обработку данных необходимо выполнить.
Наконец, я не думаю, что «строго типизированный» комментарий является уместным или подходящим соображением в среде CF, потому что CF не является строго типизированным. Это соображение, специфичное для платформы, и не имеющее ничего общего с принципами MVC.