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