Обычно архитектура пляшет от бизнес-требований, так что просто "идеальной архитектуры в вакууме" не существует.
После осмысления бизнес требований начинается выбор подхода к разработке приложения. Грубо говоря, крайности: "все пилим сами" vs "берем все готовое". После этого этапа у нас есть либо выбранный фреймворк, либо пустой проект в IDE =)
Далее, делим приложение на слои: данные, логика, сервисы, представление и т.д. И только после этого начинаются классы. В случае фреймворка - надо смотреть что диктует фреймворк (гуглить в сторону patterns/best practices об этом фреймворке). Если пилим сами, то опираемся на опыт, паттерны и снова на требования. Неплохая книга для этого:
www.amazon.com/Design-Patterns-Elements-Reusable-O...