Если вам нужно узнать количество новых сообщений, то использование Select count(*) from Messages where user_id in (sender, recipient) and id > last_seen_id
будет вашим лучшим вариантом.
Я фанат использования exists
, где это возможно, поэтому для определения, есть ли новые сообщения, мой запрос будет Select exists(Select 1 from Messages where user_id in (sender, recipient) and id > last_seen_id)
. Преимущество существует в том, что как только он находит 1 запись, он возвращает true
.
Редактировать: чтобы избежать путаницы при чтении этого ответа, оба этих запроса также будут включать проверку для other_user_id in (sender, recipient)
, чтобы возвращать сообщения только между двумя конкретными пользователями.
Я наслаждался этими точечными сетевыми горными телевизионными видео Mark Miller на Науке о Большом Пользовательском Опыте, действительно получил меня думающий о хорошем ui:
Если Вы хотите сконцентрироваться всего на одной функции, взглянуть на поле поиска iTunes, которое фильтрует, как Вы вводите. Другое программное обеспечение, возможно, имело это прежде, но это было, я думаю первое место, я встретился с ним.
Различием между этим и классическим поиском было сенсационное сообщение для меня с точки зрения удобочитаемости.
Автоматическое заполнение, которое Вы видите в таком количестве мест, является другим. Я рекомендовал бы ИДЕЮ IntelliJ для способа, которым она взяла автозавершение, какой emacs, Visual Studio и т.д. имела целую вечность и добавила автозавершение для имен переменной и имен методов способом, который почти казался экстрасенсом в первый раз, когда Вы встретились с нею.
То, где можно действительно иметь значение с дизайном GUI, - то, если Вы обращаетесь к трудному для понимания понятия в GUI.
При выполнении этого креативность очень важна. При контакте со сложными аппаратными конфигурациями (что-то я должен был сделать много, но вероятно не обращаюсь к Вам), мне везло, идя в технические руководства и людей технической поддержки и пытаясь полностью понять проблему. Затем я взял методы, которые они раньше показывали мне (схемы из руководств, рисунков электронной доски, и т.д.) и пытались кодировать их в GUI.
Имела пара серьезных успехов с этим.
Повторение также очень важно. Моделируйте что-то быстро затем просит всех, кого Вы видите для попытки его. Попросите, чтобы они решили проблему, затем смотрели, куда они идут сначала и наблюдают то, с чем у них есть проблемы.
Решите каждую проблему и камень преткновения.
Не бойтесь выбросить все это и запуститься, это был только опытный код.
Разделите свой GUI от Вашей реализации так, чтобы можно было выгрузить GUI при нахождении лучшего подхода.
Для создания вещей применимыми необходимо удостовериться, что Вы следуете существующим конвенциям для своей целевой платформы и типа приложения.
Например, при разработке Приложения Windows, необходимо удостовериться, что управление-c копирует, вставки управления-v, средства управления сохраняет, и т.д. меню File лучше быть крайним левым объектом в строке меню и Меню справки лучше самым правым объектом.
Если Вы не следуете существующим конвенциям, пользователи собираются раздражаться из-за Вашего приложения очень быстро.
Google для HIG. Инструкции по Интерфейсу пользователя обычно включают большое исследование лучшей практики в пользовательских интерфейсах и объясняют в мельчайших подробностях, как разработать каждый аспект программы. Кроме того, имейте Google для "пользовательского интерфейса Холл позора" или чего-то как этот.
В этом потоке существуют также некоторые хорошие: Лучший UI Вы Когда-либо Использовали.
В этом вопросе я упомянул неудачные дубли GUI. Часть большого дизайна знает то, что делает плохой дизайн и почему. Это - на самом деле замечательная книга, хотя я не знаю, сколько из него доступно на веб-сайте.
Вы можете проверить кейсы на сайтах GUI компаний. Я финансирую несколько на www.puzzlehead.com
Поищите там, а также на других сайтах.