Я уже написал «совместимый» ответ на этот вопрос здесь . Правило таково (по моему мнению), что в пользовательском интерфейсе не должно быть никакой логики, кроме логики пользовательского интерфейса и вызовов стандартных процедур, которые будут управлять общими / конкретными случаями.
В нашей ситуации мы подошли к моменту, когда код формы автоматически генерируется из списка элементов управления, доступных в форме. В зависимости от типа элемента управления (bound text, bound boolean, bound number, bound combobox, unbound label, ...
) мы автоматически генерируем набор процедур обработки событий (например, beforeUpdate
и afterUpdate
для текстовых элементов управления, onClick
для меток и т. Д.), Которые запускают общий код, расположенный вне форма.
Этот код может затем выполнять общие действия (проверьте, можно ли обновить значение поля в событии beforeUpdate
, , упорядочить набор записей по возрастанию / убыванию в onClick
событие и т. д.) или конкретные обработки, основанные на имени формы и / или имени элемента управления (например, выполнение некоторой работы в событии afterUpdate
, например вычисление значения элемента управления totalAmount из unitPrice и количество значения).
Наша система теперь полностью автоматизирована, и производство форм опирается на две таблицы: Tbl_Form
для списка форм, доступных в приложении, и Tbl_Control
для списка элементов управления, доступных в наших формах
После ссылочного ответа и других постов в SO некоторые пользователи попросили меня развить мои идеи. Поскольку тема довольно сложная, я наконец решил открыть блог , чтобы рассказать об этой логике пользовательского интерфейса. Я уже начал говорить об интерфейсе пользовательского интерфейса, но это может занять несколько дней (... недель!), Пока я не смогу конкретно добраться до интересующей вас темы.