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