Разработчик Sketch немного излагает свое обоснование в файле ReadMe:
Дизайн модели-представления-контроллера
Слой модели Sketch в основном состоит из класса SKTGraphic и его подклассов. Документ эскиза состоит из списка SKTGraphics. SKTGraphics — это в основном классы, несущие данные. Каждое изображение содержит всю информацию, необходимую для представления любого вида изображения. Класс SKTGraphic определяет набор примитивных методов для изменения графики, а некоторые подклассы добавляют собственные новые примитивы. Класс SKTGraphic также определяет некоторые расширенные методы для изменения графики, которые реализованы в терминах примитивов.
Класс SKTGraphic определяет набор методов, позволяющих рисовать самого себя. Хотя может показаться, что это не совсем то, что должно быть частью модели, имейте в виду, что то, что мы моделируем, представляет собой набор визуальных объектов. Несмотря на то, что SKTGraphic знает, как отображать себя в представлении, это не само представление.
Не знаю, удовлетворит вас этот ответ или нет. Мой личный опыт работы с MVC заключается в том, что, хотя разделение модели, представления и контроллера является «хорошей вещью», на практике границы между слоями часто становятся размытыми. Я думаю, что компромиссы дизайна часто делаются для удобства.
В частности, для Sketch мне кажется логичным, что модель умеет рисовать себя внутри вида. Альтернативой тому, чтобы каждый подкласс SKTGraphic знал, как рисовать себя, было бы наличие класса представления со знанием каждого подкласса SKTGraphic и того, как его визуализировать. В этом случае добавление нового подкласса SKTGraphic потребует редактирования класса представления (вероятно, добавления нового предложения в оператор if/else или switch). С текущим дизайном можно добавить подкласс SKTGraphic без каких-либо изменений в классах представлений, чтобы все заработало.
person
sbooth
schedule
03.12.2008