Советы / рекомендации по разработке MVC в нетривиальном настольном приложении - PullRequest
1 голос
/ 23 июня 2010

Каковы некоторые менее известные советы по реализации слабосвязанной структуры MVC в нетривиальном настольном приложении (например, наличие как минимум двух уровней представлений / контроллеров и нескольких моделей)?

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Использовать интерфейсы.

Много. Мне нравится использовать стиль "IDoThisForYou" (даже на языке, где это не является идиоматическим), потому что интерфейс представляет роль, которую может использовать другой класс.

Сделать контроллеров ответственными за контроль взаимодействия

Контроллеры контролируют взаимодействие между объектами домена, сервисами и т. Д.

Использование событий для передачи информации между контроллерами

Пусть каждый контроллер, которому нужна информация, подпишется на событие. Используйте интерфейс.

Не размещайте информацию презентации на объектах вашего домена

Вместо этого позвольте контроллеру создать презентатора или модель представления, в которой есть нужная вам информация. Это не включает "ToString ()". Если вы говорите на языке без множественного наследования, у вас может возникнуть небольшое дублирование между докладчиками. Все в порядке - дублирование лучше, чем связывание, и пользовательский интерфейс все равно сильно меняется.

Не вставляйте логику в ваш графический интерфейс

Вместо этого позвольте контроллеру создать докладчика или просмотреть mdoel, в котором есть нужная вам информация. Это включает в себя крушения поезда, такие как «MyAnimal.Species.Name» - вместо этого укажите «SpeciesName».

Проверьте это

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

Да, и не смоделируйте доменные объекты в модульных тестах. Это того не стоит. Используйте строителя.

1 голос
/ 23 июня 2010

Объявление обработчиков событий в ваших интерфейсах (важно для представлений).Таким образом, вы можете свободно связать обработку событий, которая управляется контроллером.Возможно, вам придется использовать InvokeRequired при работе с представлением, если ваше приложение является многопоточным.

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