Использовать интерфейсы.
Много. Мне нравится использовать стиль "IDoThisForYou" (даже на языке, где это не является идиоматическим), потому что интерфейс представляет роль, которую может использовать другой класс.
Сделать контроллеров ответственными за контроль взаимодействия
Контроллеры контролируют взаимодействие между объектами домена, сервисами и т. Д.
Использование событий для передачи информации между контроллерами
Пусть каждый контроллер, которому нужна информация, подпишется на событие. Используйте интерфейс.
Не размещайте информацию презентации на объектах вашего домена
Вместо этого позвольте контроллеру создать презентатора или модель представления, в которой есть нужная вам информация. Это не включает "ToString ()". Если вы говорите на языке без множественного наследования, у вас может возникнуть небольшое дублирование между докладчиками. Все в порядке - дублирование лучше, чем связывание, и пользовательский интерфейс все равно сильно меняется.
Не вставляйте логику в ваш графический интерфейс
Вместо этого позвольте контроллеру создать докладчика или просмотреть mdoel, в котором есть нужная вам информация. Это включает в себя крушения поезда, такие как «MyAnimal.Species.Name» - вместо этого укажите «SpeciesName».
Проверьте это
вручную. Там нет замены. Модульное и приемочное тестирование проходит долгий путь, но нет ничего лучше, чем запустить приложение и фактически использовать беспорядок, который вы написали, чтобы выяснить, насколько он беспорядочный. Не передавайте его в QA, не пройдя самостоятельно.
Да, и не смоделируйте доменные объекты в модульных тестах. Это того не стоит. Используйте строителя.