Один аспект, который я просто быстро укажу, заключается в том, что когда ваша модель изменяется, она не может вызвать представление, чтобы сказать «отрендерить это изменение» - потому что модель не должна знать о представлениях.
Вместо этого модель вызывает событие, сообщающее, что оно изменилось, и представление по мере необходимости перерисовывается при их получении.Представления знают о модели и подписываются на ее события, но модель ничего не знает о вещах, получающих события.
В качестве примера я пишу приложение OpenGL, в котором модель содержитпростые нормализованные многоугольники и многогранники, с которыми приятно работать геометрически, но не удобно переходить на OpenGL.Когда представление получает событие, сообщающее, что модель изменилась (добавлена или изменена форма), тогда представление преобразует эти многоугольники в денормализованные массивы вершин, которые можно передать в OpenGL.Это дорогостоящая операция, поэтому представление кэширует эти массивы в свою собственную коллекцию «того, что должно быть визуализировано», и при рендеринге просто перебирает эту «коллекцию представлений», передавая каждый массив в OpenGL.Таким образом, представление является единственным кодом, который знает об OpenGL, и является единственным кодом, который знает, как преобразовать состояние модели в структуры OpenGL.