Розробка клієнт - серверних баз даних довгий час надавала вірний фрілансерський заробіток, і я потратив на цю справу досить багато років. Деякі речі, винайдені мною в даній області, придалися неодноразово, були випробувані в реальних умовах й доказали ефективність. Розкажу про одну з них.
Коли розробляєш віконний інтерфейс якоїсь бази даних (наприклад на Delphi), часто виникає проблема, реалізувати можливість вибору з того чи іншого каталога (наприклад, якщо у нас в базі даних "Статистика Футболу" є каталог "футбольні команди", то вводячи дані про новий матч між командами, треба два рази вибрати з каталога "футбольні команди", аби вказати учасників матчу). Стандартне керівництво по віконному інтерфейсу пропонує тут дві можливості: або вибирати з випадаючого списку (combo box), реалізованого або як окремий елемент інтерфейсу або як можливість самої екранної таблиці (grid) зі списком елементів - або, після натискання кнопки вибору, має з'явитись ціле нове модальне вікно зі списком, із котрого користувач може зробити вибір елементу.
Обидві ці можливості погані, і ось чому. Вибір з випадаючого списку не надає користувачу всіх необхідних можливостей для комфортного вибору з великої кількості елементів (неможливо встановити той чи інший фільтр, пошук, вибір за першою літерою назви, й т.ін.), і крім того - неможливо створити новий елемент й одразу його вибрати. Модальне вікно вибору, що з'являється на екрані по натисканню кнопки вибору елемента, дозволяє реалізувати всі ці необхідні можливості - однак, поява модального вікна збиває з пантелику непідготованого користувача, а крім того, на такому вікні вибору доводиться майже повністю дублювати функціональність стандартного вікна каталогу цих елементів (тобто крім модального вікна вибору, в інтерфейсі бази даних має бути передбачене ще майже таке саме вікно, з якого ведуть відповідний каталог: вводять нові елементи, редагують, витирають, переглядають) - що неелегантно, збільшує об'єм програми, і також збиває з пантелику користувача.
Для вирішення цієї проблеми, я винайшов досить простий спосіб: для вибору елемента з каталогу, треба відступити від стандартної ідеології побудови віконних інтерфейсів, й вибирати елемент не в спеціальному модальному вікні, а "модальним чином" перейшовши до вікна самого каталога цих елементів (тобто замість модального вікна вибору елемента, по натисканню кнопки "вибір з каталога", перед користувачем з'являється той самий стандартний каталог цих елементів - однак, в даному випадку вийти з нього він не може ніяк інакше, аніж тільки обравши один із елементів та натиснувши кнопку "вибрати", що там з'явилася).
Особливо корисним в такому варіанті є те, що тоді цілий інтерфейс бази даних може взагалі не потребувати ніяких модальних вікон, котрі зненацька з'являються перед користувачем, чого користувачі не люблять. Цілий інтерфейс стає можливо скомпонувати як один великий "багатосторінковий елемент" (tabbed notebook), із вкладеними в нього меншими "багатосторінковими елементами", на декілька рівнів вкладеності. Користувач може вільно перемикатися між їх сторінками, переглядаючи весь інтерфейс бази даних, і якщо скомпонувати ці вкладені багатосторінкові елементи згідно з внутрішньою логікою самої бази даних - то все це виглядає для користувача значно простіше, логічніше й зрозуміліше, аніж якщо робити для кожного типу елементів, що зберігаються в базі, своє окреме вікно. А у випадках, коли треба ввести якийсь вибраний з того чи іншого каталога елемент - по натисканню кнопки вибору, "багатосторінковий елемент" перемикається, щоб показати відповідний каталог таких елементів, після чого "застигає" (можливість перемкнутись на інші його сторінки вимикається кодом), і десь збоку на сторінці каталога з'являється кнопка "вибрати"; після цього, користувач може, не покидаючи сторінки з відповідним каталогом, вибирати потрібний елемент, вводити новий, користуватись фільтрами й пошуком, і всіма іншими можливостями, а коли необхідний елемент буде вибрано (підсвічено в списку елементів) - натиснути кнопку "вибрати", що зразу поверне його на сторінку, де він вводив дані та з якої натиснув кнопку вибору елемента (зрозуміло, обраний користувачем елемент має бути введено у відповідну контрольку: наприклад, в ній має з'явитись його назва, а її полю tag присвоєно його номер).
Реалізувати подібний режим вводу досить легко, навіть не програмуючи нових компонентів, достатньо лише додати відповідний код (зовсім мало) до відповідних стандартних компонентів. Кнопка вибору з каталогу, переважно, додається до контрольки вводу рядка тексту (edit), скраю справа, повністю всередині її білого поля (так що контролька вводу стає схожа на combo box, тільки піктограма на кнопці ставиться інша, я ставив піктограму руки що наче намагається обрати елемент). Можливість ручного вводу тексту в це поле, зрозуміло, відмикається - туди лише кодом записується назва обраного елементу, котрий буде обрано в каталозі. В самих каталогах, з котрих робиться вибір, досить передбачити ще одну додаткову кнопку, натиснувши на котру, користувач обиратиме елемент; в звичайному режимі ця кнопка невидима, і стає видимою лише в режимі вибору з каталога.
Організований таким чином інтерфейс бази даних легко сприймається непідготованими користувачами - тут для них усе виглядає просто, тоді як між багатьма окремими модальними вікнами вони губляться.
Зрозуміло, було б елегантніше реалізувати все це спеціальними компонентами - але додатковий програмний код, що реалізує цю можливість, настільки простий, що я ніяк не зібрався цього зробити. Можливо, колись такі компоненти ще напишу - а поки що, викладаю саму ідею.