Почему бы не построить пользовательский интерфейс на основе схемы БД? - PullRequest
5 голосов
/ 20 сентября 2009

Люди, кажется, избегают создания пользовательских интерфейсов, которые извлекают их информацию (имена, типы полей и т. Д., А также отношения) из базы данных; вместо этого они имеют жесткие формы кода (и таблицы и т. д.), которые имеют почти одинаковые имена данных, типы и вещи.

Имею ли я смысл?

Например, представьте эмулируемое поле в MySQL: почему бы просто не создать пользовательский интерфейс в раскрывающемся списке, когда он встречает ENUM? Зачем помещать одинаковые значения в базу данных и код?

Возможно, я просто что-то упустил; возможно, есть проекты, которые делают это - своего рода супер-грубые интерфейсы, которые могут быть нацелены на любую базу данных и на ее основе создают полнофункциональный реляционно-ориентированный пользовательский интерфейс. Есть ли?

Возможно, я не совсем согласен с нормами стекового потока с этим вопросом; Подведу итог:

  1. Не могли бы вы рассказать мне о проекте, который строит свой пользовательский интерфейс (исключительно) из анализа схемы базы данных?
  2. Почему это не распространенный способ сделать это - конечно, хорошо определять структуру данных только в одном месте (то есть в базе данных)?

Спасибо, и пусть радостный код-любовь обрушится на вашу IDE.

Ответы [ 11 ]

6 голосов
/ 20 сентября 2009

Я хотел бы отметить, что в прошлый раз, когда я проверял, .NET и Qt (и, возможно, другие среды) позволяют использовать «виджеты с поддержкой базы данных» (иногда сокращенные до просто виджетов с поддержкой данных), которые это, вероятно, лучшее прагматическое решение. Под виджетами, учитывающими данные, я подразумеваю, что сами виджеты знают, что они связаны непосредственно с полями базы данных, поэтому у вас будет комбинированный список, который знает, что он поддерживается перечислением, и получает возможные значения непосредственно из базы данных во время выполнения, как ты и предлагал.

Это действительно аккуратная утилита, и она хорошо используется, и, вероятно, ничего не повредит. Это все еще требует, чтобы вы потратили некоторое время на размещение виджетов вручную на форме, но затем, если вы обновите базу данных, чтобы добавить новое значение к этому перечислению, вам не нужно перестраивать приложение, чтобы увидеть его в пользовательском интерфейсе.

Но причина, по которой большинство экспертов по юзабилити смущается, услышав ваш вопрос, заключается в том, что программисты склонны думать, что, ну почему бы просто не сгенерировать весь пользовательский интерфейс, макет формы и все остальное из базы данных? И вот тут-то и начинает становиться очень противно, очень быстро.

Допустим, у вас есть простая таблица Person, в которой указаны имя, фамилия, адрес электронной почты, адрес улицы, город, штат, почтовый индекс и номер телефона. Вы хотите автоматически генерировать пользовательский интерфейс на основе этих полей. Как вы сортируете поля? Я имею в виду, в идеале, имя и фамилия должны быть рядом друг с другом. И это было бы очень глупо, если бы вы указали город и штат до адреса улицы. Поэтому вам нужно добавить новый столбец в таблицу, чтобы указать порядок сортировки, если вы используете самый быстрый метод, или новую таблицу, чтобы указать индекс порядка каждого поля для их идентификатора поля.

Что если вы хотите сгруппировать части информации отдельно? Затем вам нужно добавить больше UI-специфических элементов в макет вашей базы данных (чтобы сделать это в общем, вам понадобится новая таблица, указывающая, какие поля UI принадлежат каким групповым полям UI). Таким образом, вы решили только две проблемы, и уже ваш макет базы данных стал в два раза хуже, плюс теперь вместо простой операции макета O (1) при загрузке пользовательского интерфейса вам нужно выполнить несколько запросов к базе данных, чтобы выяснить, какие поля существуют и динамически размещают их при применении правильного порядка виджетов ... и мы даже не имели дело с размером (должен ли каждое поле иметь максимальный размер, чтобы соответствовать его возможному содержимому, или все текстовые поля должны иметь одинаковую ширину? Было бы неплохо, если бы вы могли сказать, что некоторые текстовые поля должны иметь одну ширину и высоту, а некоторые - другую комбинацию? и т. д.), или выравнивание текста, или форматирование, или любые другие действительно общие элементарные требования юзабилити, которые потребуют дополнительных жертв от ясность и простота схемы вашей базы данных.

3 голосов
/ 25 сентября 2009

Да, этот маршрут уже пройден.

Простое указание на базу данных создаст упрощенный пользовательский интерфейс, не предоставляя намного больше, чем CRUD пользовательского интерфейса доступа. Вот почему Naked Objects (я один из его коммиттеров) строит свою метамодель из модели домена pojo. Это позволяет UI выставлять любые открытые методы в виде меню ... мы называем это "поведенчески завершенным".

За комментарий о том, что пользовательский интерфейс не подходит для конечных пользователей, у меня есть два момента:

  1. различают опытных пользователей и случайных пользователей. Большинство внутренних приложений предназначено для первых (для этого мы используем термин «суверенное приложение» Алана Куперса), которые понимают предметную область и не хотят, чтобы мешали необычные элементы пользовательского интерфейса. Большинство внешних приложений, например общедоступных веб-сайтов, предназначены для последних.

  2. для последнего нет ничего, что могло бы помешать автоматически сгенерированному пользовательскому интерфейсу инструмента, такого как Naked Objects, заменяться пользовательским или частично настраиваемым средством просмотра. Одним из таких зрителей является Scimpi, я также работаю над Eclipse RCP viewer, который будет предоставлять точки расширения. Но даже здесь, пользовательский интерфейс auto gen все еще очень полезен для разработчиков и бизнес-аналитиков для исследования и создания прототипов.

Надеюсь, некоторые из вышеперечисленных пробудили ваш интерес. Если вам нужно больше, поищите в Google, или вы можете проверить мою книгу о доменном дизайне и НЕТ по адресу pragprag.com.

НТН Dan

3 голосов
/ 20 сентября 2009
  1. Большинство визуальных редакторов баз данных. phpMyAdmin например.

  2. Поскольку структура базы данных не всегда является очень хорошей логической структурой для использования пользователем, особенно в случае баз данных, которые были специально денормализованы из соображений эффективности.

2 голосов
/ 20 сентября 2009
1 голос
/ 16 декабря 2009

Просто заметка о Java «проекты, которые реализуют эту идею» - tynamo - это новая версия фреймворка Trails

1 голос
/ 20 сентября 2009

Microsoft Access использовал эту модель в течение многих лет - разработка базы данных и пользовательского интерфейса очень тесно связаны. Вы можете автоматически сгенерировать форму непосредственно из определения таблицы со встроенными интеллектуальными настройками по умолчанию и поиском. Эта модель хорошо работает для разработки приложений с небольшим количеством одновременно работающих пользователей, таких как настраиваемые приложения для малых предприятий, где объем хранимых данных небольшой.

Если вы расширяете реляционные БД с большим количеством одновременно работающих пользователей или большие базы данных, тогда надежность и производительность становятся более важными, а интерфейс и базы данных, создаваемые отдельно, имеют больше смысла. Когда вовлекается больше пользователей, они часто предъявляют различные требования, поэтому отсоединение пользовательского интерфейса от схемы БД делает его разработку более эффективной.

1 голос
/ 20 сентября 2009

Конкретно на ваш второй вопрос: многое зависит от вашей модели данных. Некоторые из них очень сложны и могут привести к неинтуитивным пользовательским интерфейсам. Возможно, для простых систем, основанных на CRUD, предпочтительнее иметь интерфейс пользователя в качестве базы данных для базы данных. В этом случае, я думаю, что некоторые из этих инструментов будут великолепны. Однако для некоторых более сложных систем, где некоторые данные БД должны быть скрыты от пользователей, было бы лучше, если бы ваш пользовательский интерфейс не отражал схему БД.

0 голосов
/ 17 августа 2015

Вы можете сделать это с помощью этого замечательного инструмента от разработчика из Филиппин, он называется COBALT . Вы можете скачать его здесь .

0 голосов
/ 21 сентября 2009

Я думаю, что вы забываете учитывать пользователя в процессе проектирования, если вы так думаете. Плохая ошибка Пользователям не нравится, когда интерфейс меняется, им особенно не нравится, если он часто меняется, потому что тогда они не будут знать, что делать. Кроме того, если вы создадите свой пользовательский интерфейс на лету на основе структуры базы данных, то в каком порядке будут располагаться объекты? Пользовательские интерфейсы должны иметь объекты в порядке, который имеет смысл для пользователей, а не для разработчиков баз данных.

Кроме того, в хорошо спроектированной базе данных есть поля, которые не предназначены для просмотра пользователями. Такие вещи, как цифровые клавиши, дата вставки, последнее обновление и т. Д. Вы не хотите автоматически выставлять их пользователям и, конечно же, не хотите, чтобы они имели возможность связываться с данными в таких полях.

Наконец, если вы не думаете о функциональности страницы, значит, вы не выполняете свою работу. Пользовательский интерфейс должен быть больше, чем просто список полей, которые можно редактировать. У вас должны быть ограничения на то, кто что может видеть, проверки данных перед вставкой в ​​базу данных, бизнес-правила, которые необходимо применять. Вы не можете просто сгенерировать многое из этого (и вы не должны, даже если бы могли!). Дизайн нуждается в мысли и заботе.

Теперь, что касается выпадающих списков, конечно, вы можете генерировать их из базы данных, а не из кода, на самом деле это лучший выбор. Просто сделайте запрос источником для вашего конкретного объекта, а не списком, сгенерированным в коде.

0 голосов
/ 20 сентября 2009

Обнаженные объекты примерно в одном шаге от этого. Они основывают пользовательский интерфейс на объектной модели, а затем сохраняют объектную модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...