Проектирование приложений можно условно разбить на 2 уровня:
1. Уровень проекта.
Сюда входит понимание того, как приложение должно выглядеть в целом и из каких компонентов состоять, а также по каким принципам оно собирается взаимодействовать с внешним миром (если есть такая необходимость). Компоненты зависят от выбранной архитектуры - в случае монолитного приложения вам требуется понимать, как разбивать его на слои и в чем ответственность каждого слоя; в случае микросервисов вы также должны понимать, как очерчивать зоны ответственности и определять протоколы взаимодействия между ними.
Книги о том, как проектировать приложения на общем уровне:
1. Роберт Мартин. Чистая архитектура - очень короткая и простая книга, рекомендую начать с неё.
2. Эрик Эванс. Предметно-ориентированное проектирование (принципы + стратегические шаблоны).
3. Мартин Фаулер. Архитектура корпоративных приложений (часть 1).
Уровень 2. Уровень модулей (классов).
Когда вы спроектировали компоненты, из которых состоит ваше приложение, теперь надо спроектировать их внутренности - то есть разбить на более мелкие и конкретные модули. Тут вам пригодятся принципы объектно-ориентированное проектирования, принципы SOLID, паттерны.
Книги по уровню 2.
1. Банда четырех. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. Тут важно не только сами паттерны, но принципы, по которым они строятся. Концентрируйтесь на принципах.
2. Роберт Мартин. Принципы, паттерны и методики гибкой разработки на языке C#. Тут более подробно рассматривается объектно-ориентированный дизайн и принципы SOLID в сравнении с его "Чистой архитектурой".
3. Эрик Эванс. Предметно-ориентированное проектирование (тактические шаблоны).
4. Мартин Фаулер. Архитектура корпоративных приложений (часть 2).
5. Стивен Макконел. Совершенный код (сконцентрируйтесь на понимании Главного Технического Императива!).
Этих книг вам будет достаточно, чтобы ориентироваться в проектировании приложений, всё остальное решает практика. Рисуйте схемы, концентрируйтесь на ответственности компонентов и их интерфейсах, учитесь отбрасывать ненужные детали реализации.