Работаю над проектом в Qt по проведению специализированных расчетов, в качестве исходных данных в расчетный модуль передается модель, состоящая из помещений, коридоров, проемов, лестниц (т.е. планировка здания). Модель создается в графическом модуле 2D векторного редактора (планирую использовать QGraphicsScene и QGraphicsView)
По всем канонам архитектуры документ/представление модель здания хранится в экземпляре класса документа, отрисовывается модель в графическом модуле, который тоже реализует архитектуру документ-представление.
Документ модели здания и документ графического модуля отличаются друг от друга, так, например, они позиционируются в различных системах координат (модель здания – физические координаты, графический модуль - экранные); в графическом модуле появляются такие отдельные элементы как маркеры (которые изменяют размеры элементов), надписи элементов, и т.д.
В итоге получается архитектура документ/документ/представление, для отрисовки модели ее необходимо перевести из формата документа модели здания в формат документа графического модуля, при редактировании модели в графическом модуле необходимо вносить изменения в документ модели здания, т.е. синхронизировать два документа.
Вопрос: Как такое решения согласуется с принятыми канонами архитектуры документ/представление в программировании? Или надо создать единый документ который знает про физические координаты и про экранные, знает особенности физического объекта и экранного элемента? Существует-ли более изящное решение?
Есть такой мало кому известный инструмент BlackBox Component Builder, написанный на Компонентном Паскале, потомке Оберона и Паскаля. Опен сорс, код легко читаемый и есть документация на английском. Так вот он представляет из себя фреймворк, работающий поверх ОС и его GUI реализован в виде абстрактной графической модели. Для вывода используются физические единицы, будь то размеры в мм или поинтах. Всё это преобразовывается по формулам в итоговый растровый формат при отображении.
Смотреть код System/Mod/Ports (абстракция) и Host/Mod/Ports (реализация под WinAPI).