Кроссплатформенность
Желательно, чтобы внутренние модули проекта максимально не зависели от 1С и Windows.
Что для этого нужно?
- Независимость контекст-классов от 1С. Для этого сделан Utils1s::Context. Осталось все имеющиеся классы перевести на него и использовать его для новых классов.
- Платформеннонезависимые примитивы: контейнеры и алгоритмы. Исключить использование MFC-контейнеров и строк. MFC-контейнеры плохи сами по себе, к тому же привязывают проект к MFC. Взамен нужно использовать STL и Boost. Уже делается.
- Непрямое взаимодействие с 1С: вывод сообщений и генерация ошибок. Начало уже положено: созданы абстрактные классы Utils::CUserInteface и Utils::CSystemInterface. Эти классы определяют абстрактный интерфейс взаимодействия с пользователем и системой. Они оформлены в виде синглтонов. При получении экземпляра класса они возвращают экземпляр конкретного класса: Utils1s::CUserInterface и Utils1s::CSystemInterface. Необходимо проверить проект на наличие случаев прямого взаимодействия с 1С и заменить подобные места на использование абстрактных классов.
- Отрисовка листа. Сейчас отрисовка происходит средствами MFC с использованием классов типа CDC, CFont, CPen и т.д. Необходимо отвязаться от MFC. Возможный путь: реализация абстрактных оберток для CDC, CFont и CPen + абстрактная фабрика графических объектов.
- Взаимодействие с системой (файлы и т.д.) Необходимо использовать либо кроссплатформенные средства (STL и boost), либо реализовать свои оберточные классы с фабрикой системных объектов.
Блог