logo
logo
Технологическое решение... [Dervish 30/06/2004 14:52]
...таково:
 
Очень много времени (и места в готовой программе) занимает элементарное форматирование форм (диалогов, панелей, etc.) Это - основная трудность. Кроме того, проблемы возникают из-за того, что AbilityCash, в принципе, переводим на другие языки, все метки вынесены в отдельный файл (его пока не видно). А раз так, то и размеры всех текстовых подписей могут изменяться. В общем, примерно до 40% кода занимает элементарная обработка всей этой фигни. Да и довольно много ошибок, которые описывались в этом форуме тоже относятся к этим вещам.
 
Я начал думать, как можно сделать иначе. И поймал себя на мысли, что есть образчик того, как можно решить форматирование диалогов. Это HTML, на котором делают отдельные приложения, например, тот же MS Money (точнее, там DHTML, но не суть важно - принципы те же). Но у приложений на DHTML другие проблемы - они медленно работают и занимают много места, так что его рассматривать я не могу.
 
В итоге я написал некий код, с которым создание диалогов делается вот так:
 
1. Описывается диалог (форма) в XML, в неё указывается всё поведение формы при изменении размеров и т.д. и т.п.
 
2. XSLT транслирует это описание в обычную С-шную константу, которая скармливается компилятору.
 
3. Готовый код динамически (на этапе исполнения) читает эту строковую константу, сам создаёт все контролы, размечает диалог и обеспечивает поддержку его исполнения.
 
Вуаля. Теперь доработка интерфейса программы будет состоять в правке XML-кода и дописывании бизнес-логики.
 
А занялся я этой фигнёй после того, как представил себе, во что выльется программирование интерфейса для отчётов. Мне, честно говоря, поплохело.
 
Теперь, по мере того, как я переведу все формы и диалоги на новый код, думаю, что размер программы (exe-шника) сильно сократится, поскольку теперь будет один и тот же код отвечать за все диалоги и формы.