Мы разрабатываем среду встроенного типа и обнаруживаем, что нам нужно создать собственную структуру пользовательского интерфейса.
Я делал это раньше, но мне интересно провести небольшое исследование общих шаблонов проектирования для фреймворков.
Типы вещей, которые я считаю шаблонами (несколько далеко идущие):
Что вы рекомендуете для чтения по шаблонам GUI Framework?





У меня есть два для вас, обратный вызов или уведомление, может быть, это то, что вы называете «прикреплением команд к виджетам», вы хотите каким-то образом реагировать на изменения состояния в вашем элементе пользовательского интерфейса. Контроллер должен быть проинформирован о том, что произошло изменение.
Какао / UIKit имеет шаблон, который называется «Делегирование», и уведомления для этого, другие используют функции или объекты обратного вызова (Java Swing) или «сигналы и слоты» (QT).
Я очень полезный шаблон, который не встречается в дикой природе очень часто, - это возможность предотвращать изменение состояния, самый простой вариант использования для этого - проверка ввода, вы хотите предотвратить потерю фокуса из виджета, когда текст в виджете не согласны с тем, что вы ожидаете. Раньше в Windows Forms это было для некоторых элементов, но не для всех, Cocoa может это сделать. Этого можно достичь, используя возвращаемые значения или ссылочные параметры (или указатели) в обратных вызовах, где вызываемый объект может связываться с исходным виджетом.
В наши дни применение стилей к элементам пользовательского интерфейса, т.е. изменение внешнего вида без изменения функциональности, также стало очень популярным. QT может это сделать, и я уверен, что многие другие библиотеки
Шаблон Gang of Four Decorator также иногда используется для расширения возможностей виджета, делая что-то прокручиваемое, что можно сделать с помощью декоратора. Все зависит от того, насколько далеко вам нужно будет зайти с элементами пользовательского интерфейса. Удачи, это непростая задача
EDT: применяйте MVC везде, где можете. Первыми кандидатами являются любые виды списков, не возлагайте на них ответственность за сохранение элементов, которые они отображают. Это определенно относится к полю со списком, списку, таблицам и деревьям, вы можете реализовать это для текстового ввода, но это может не окупить накладных расходов.
Некоторые вещи, которые я узнал, помогая разрабатывать SingStar PS3
Изучите XAML, особенно привязки.
Microsoft проделала действительно хорошую работу над чистым языком XML для описания макета графического интерфейса, и если вы используете упрощенную версию XAML для описания своего пользовательского интерфейса, вы сможете использовать их инструменты для дизайнеров для создания макетов пользовательского интерфейса.
Несколько советов по классическим паттернам проектирования; Я думаю, это связано с построением графического интерфейса:
Я знаю, что вы спрашивали о выкройки для каркасов, но все же вам следует полагаться на эти шаблоны, поскольку разработчики, вероятно, будут использовать вашу структуру с учетом этих концепций.
У вас есть требования / особые потребности для вашей структуры? Вы, вероятно, захотите потерять пару «хороших принципов», если ваша целевая платформа ограничена в памяти / процессоре.
Пример в контексте графического интерфейса:
interface IWidget
{
bool HandleEvent(Event event); // returns true if event was handled
// or false if event was ignored
}
class Button : IWidget
{
public override bool HandleEvent(Event event)
{
switch(event.Type)
{
case EventType.MousePressed: DoStuff(); return true;
case EventType.MouseScrolled: return false;
}
}
}
Здесь Buttons не заботятся о событиях прокрутки, поэтому они позволяют своим родителям (цепочка подчинения) обрабатывать их. Итак, если у вас есть кнопка, например, HTML-страница, и пользователь прокручивает кнопку, это обрабатывается родительским виджетом (представление HTML), и вся страница прокручивается.
Для примера реального использования в Qt framework смотрите bool QWidget :: event (QEvent *) и документация по фильтрам событий.
См. Также: Шаблоны проектирования в KDE. KDE - это кроссплатформенная коллекция объектно-ориентированных библиотек и программного обеспечения C++ с открытым исходным кодом, очень популярная в качестве среды рабочего стола Linux. Это слайды с конференции KDE 2003 года.
Иногда может пригодиться Внедрение зависимости.