Я вижу два основных вида дизайнерской деятельности.
Существует разложение на части первичной системы. Итак, у вас уже есть представление об отделении презентационных частей от остальной части вашей системы. Вы, вероятно, тоже будете иметь некоторую бизнес-логику и постоянство. Первый важный вопрос: сколько у вас бизнес-логики? Некоторые системы - это всего лишь тонкая оболочка перед простой базой данных, вряд ли какая-то истинная бизнес-логика. У других есть очень важные части бизнес-логики, которые в некоторой степени независимы.
Если у вас есть основные полунезависимые элементы, они могут лучше всего общаться через события и очереди сообщений. Итак, определите, есть ли у вас элементы, которые нуждаются в такого рода разделенных отношениях, и это приводит к идентификации событий и полезной нагрузки этих событий. Вот где Фаулер, на который есть ссылка в другом ответе, становится подходящим.
Следующее упражнение в части бизнес-логики. Интерфейсы, абстрактные классы и т. Д. Являются методами структурирования реализации сложности. Разделяйте свой код, чтобы детали были скрыты, а гибкость включена. Я рассматриваю это как упражнение по разработке ОО, есть много книг по этому поводу, например, head first .