Когда модель изменится, она должна
сообщить докладчику или напрямую
сообщить представление, которое затем обновляет
посмотреть
Модель должна сообщить докладчику, который затем обновляет представление.
Теперь давайте предположим, что есть родитель
компонент, PatientManager, который
показывает обзор пациентов, ... но
как бы он взаимодействовал с
PatientModel / View / Presenter
Я бы рассматривал их как подвид большого пользовательского интерфейса, который занимается управлением пациентами. В этом случае докладчик будет обрабатывать оба. Взять на себя ответственность за заполнение менеджера пациентов и реагировать на поиски. Затем, когда оператор выбирает пациента, представление передает это подаркам. Затем, когда данные пациента извлекаются, подарки извлекают данные из модели и заполняют данные пациента.
То, как я бы это сделал, выглядит так
Просмотр сборки / EXE / пакета
Ассамблея докладчика / DLL / Пакет
Сборка команд / DLL / Пакет
Сборка Presenter Manager / DLL / Пакет
Модель в сборе / DLL / Пакет
Представление будет реализовывать интерфейсы представления, обнаруженные в Presenter, например IPatientManagerView и IPatientView, и регистрироваться в Presenter. Реализации будут использовать интерфейсы Presenter, предоставляемые через Presenter Manager. Например, IPatientManager и IPatient
Докладчики будут реализовывать интерфейс Presenter, обнаруженный в Presenter Manager, и регистрироваться в Presenter Manager. Это может быть один класс, который реализует как IPatientManager, так и IPatient, или два. Когда ему нужно выполнить действие, связанное с пользовательским интерфейсом или моделью, он выполняет команду, найденную в Commands. Команда будет использовать модель и / или интерфейсы презентатора для выполнения действия.
Чтобы воспитать пациента, это выглядело бы примерно так.
У вас есть диалоговое окно, которое реализует IPatientManagerView и зарегистрировано в классе, который реализует IPatientManager.
- Пользователь нажимает кнопку Поиск
- Поиск звонков Метод поиска
IPatientManager
- Класс, реализующий IPatientManager
использует IPatientManagerView для извлечения
параметры поиска.
- Затем настройте и выполните поиск
Команда, которая получает список
пациент.
- Команда поиска вызывает ListPatients
на IPatientManager
- Класс, реализующий
IPatientManager использует метод
IPatientManagerView очистить и заполнить
из списка пациентов.
- Двойные клики пользователя на пациенте
- Агрегат Dialog
IPatientManagerView вызовет
класс, реализующий IPatientManager
указывая на то, что конкретный пациент
быть на виду.
- Класс, реализующий
IPatientManager извлекает
нужна информация о пациенте
просматривать из диалогового окна реализации
IPatientManageView
- IPatientManager затем устанавливает и
выполняет команду для просмотра
Пациент.
- Команда извлекает все
Информация о пациенте из модели
и вызывает метод ViewPatient на
класс, реализующий
IPatientManager
- IPatientManager затем получает
класс, реализующий IPatient.
- Передает информацию о пациенте
IPatients и говорит это отображать
сам. Затем IPatient извлекает
IPatientView, который зарегистрирован с
это.
- Заполните его с пациентом
данные с использованием IPatientView, а затем
говорит IPatientView отображать себя.
С помощью этой схемы вы можете радикально изменить пользовательский интерфейс, изменив то, что реализует различные интерфейсы представления. Вы также можете легко исправить автоматизированный тест, создав фиктивные классы, которые реализуют интерфейсы View. Плюс для будущего обслуживания каждое взаимодействие явно документируется через интерфейсы.