Вот как я решил разработать программное обеспечение.
С двумя классами я сделал чистый дизайн, который очень прост в использовании, с небольшим компромиссом со стороны обслуживания, но все еще очень удобный.
Первый класс (classA
) хранит для каждого агента значение, отображаемое для каждого представления графического интерфейса.
Итак, если я знаю текущего агента переднего плана (переменная состояния приложения), я могу получить доступ к map<agentId, classA>
и получить значение для каждого представления.
Аналогичным образом, когда получено новое значение, я просто сохраняю его в объекте classA
связанного агента.
Второй класс (classB
) отвечает за обновление каждого элемента графического интерфейса, поэтому:
- Хранит ссылку на каждый объект вида графического интерфейса
- Хранит ссылку на
map<agentId, classA>
- Для каждого элемента графического интерфейса у него есть метод для обновления, который принимает параметр
agentId
для доступа к нужному classA
объекту, из которого извлекается правильное значение
- Он имеет единственный метод
updateAll
, который вызывает каждый метод обновления (используется, когда требуется переключение агента)
Пример использования
При получении новых данных для агента я просто делаю следующее (псевдокод):
newBloodPressureValue(agentId, value) {
[map<agentId, classA>].get(agentId).setBloodPressureValue(value)
if (agentId is foregroundAgent)
classB.updateBloodPressureField(agentId)
}
Преимущества дизайна:
- Это позволило мне использовать один вид деятельности
- Это позволило мне статически создать макет графического интерфейса через файл XML
- Он легко поддерживает несколько агентов
Недостатки конструкции:
- Если необходимо добавить элемент GUI, необходимо отредактировать три пункта: ссылку на
classB
членов, метод обновления, вызов метода обновления в updateAll
метод
Комментарии, критика, предложения высоко ценятся.