Разрабатывается обычное декстоп приложение с возможностью портируемости на различные платформы (в очень далеком будущем...

сейчас хотелось бы правильно сделать архитектуру, для чтобы когда настанет время — ничего не рефакторить).
GUI'ем для винды хочется взять творение питерских ребят из BCGSoft любезно предоставляемого Майкрософтом в рамках MFC Feature Pack for Visual C++ 2008.
В том о чем я дальше буду писать я почти не разбираюсь, так что прошу поправить меня и предложить действительно правильные, подтвержденные опытом варианты.
Снйчас я вижу весь GUI приложения, как набор классов управляемых каким-то GUIManager'ом реализующим IGUIManager — в который агрегировано огромная куча интерфейсов — по интерфейсу для каждой группы семантически связанных контролов.
Основное приложение с помощью какой-то фабрики получает объект реализующий IGUIManager (свой для каждой реализации гуя на каждой платформе) — тем самым обеспечивая кроссплатформенность.
Приложения MFC сгенерированные виззардом построены по другому принципу — не буду писать всем и так известно.
Как адаптировать MFC приложение для моих нужд, как отделить GUI от логики в рамках MFC, чтобы GUI можно было как угодно менять (при условии сохранении реализации GUI'ем необходимых логике интефейсов) не затрагивая логики.