Вопрос: Паттерны проектирования?

Лучший ответ:
Паттерны - это реальные инструменты, позволяющие добиться реализации концепции объектно-ориентированного проектирования и принципов SOLIDСсылка на SOLID
Это важная концепция, без нее построить эффективный и эргономичный инструмент даже на хорошем фреймворке будет затруднительно.
Один из наиболее часто встречающихся мне примеров, это пример принципа "Принцип открытости/закрытости" , когда класс - описывающий некую сущность(например модель комментария) , описывает только свои базовые назначения( создание, удаление, редактирование), при этом такие механизмы, как модерация, прикрепление файлов, лайки , реализуется другими классами и "прикручиваются" к классу моделей через интерфейсы и наследование/ трейты / примеси
При этом :
1) Никак не изменяется код класса "Комментарий" (кроме подключения интерфейса)  и в будущем мы добавляем поведения без изменения класса + стабильность системы,  гибкость
2) Каждый класс имеет свое четкое назначение + легкость модификации, порядок
3) Комментарии наследуют некоторое поведение, путем подключения поведения, но также могут поступать любые другие классы - сущности (посты, блоги итп) , то есть интерфейс и реализация лайков универсальна, и весь функционал работы лайков находится только (строго!!!)  в одном месте + легкость модификации, Универсальность, стабильность, интуитивная понятность 
Из википедии : 
Признаки плохого проекта Закрепощённость: система с трудом поддается изменениям, поскольку любое минимальное изменение вызывает эффект "снежного кома", затрагивающего другие компоненты системы.Неустойчивость: в результате осуществляемых изменений система разрушается в тех местах, которые не имеют прямого отношения к непосредственно изменяемому компоненту.Неподвижность: достаточно трудно разделить систему на компоненты, которые могли бы повторно использоваться в других системах.Вязкость: сделать что-то правильно намного сложнее, чем выполнить какие-либо некорректные действия.Неоправданная сложность: проект включает инфраструктуру, применение которой не влечёт непосредственной выгоды.Неопределенность: проект трудно читать и понимать. Недостаточно четко выражено содержимое проекта.
Оттуда же про SOLID
Избавиться от "признаков плохого проекта"[4] помогают следующие пять принципов SOLID:Принцип единственной ответственности (The Single Responsibility Principle)
Существует лишь одна причина, приводящая к появлению класса.Принцип открытости/закрытости (The Open Closed Principle)
«программные сущности … должны быть открыты для расширения, но закрыты для модификации.»Принцип подстановки Барбары Лисков (The Liskov Substitution Principle)
«объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы.»Принцип разделения интерфейса (The Interface Segregation Principle)
«много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения.»Принцип инверсии зависимостей (The Dependency Inversion Principle)
«Зависимость на Абстракциях. Нет зависимости на что-то конкретное.»

Худший ответ:
изучая паттерны, нужно понимать, что они могут упростить систему, а могут загадить так что никто не поймет.)
вообще цель разбить систему на части, сделать все максимально просто, и части  сделать максимально независимо.
обычная болезнь после изучения шаблона -  пихать его везде. иногда это получается как пушкой по воробьям. 
паттерны это вещь не сама по себе.  они иногда нужны для реализации например solid принципов.