Design Patterns and Anti-Patterns, Love and Hate

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Шаблоны проектирования - это… Ну, вы знаете, что это такое. Это то, что мы любим и ненавидим. Мы любим их, потому что они позволяют нам писать код, не задумываясь. Мы ненавидим их, когда видим код от человека, привыкшего писать код, не задумываясь. Я не ошибаюсь? Теперь позвольте мне пройти через каждый из них и показать вам, насколько я их люблю или ненавижу. Следуйте за мной, в алфавитном порядке.

Абстрактная фабрика. Это нормально.

Адаптер. Хороший шаблон!

Мост. Хороший шаблон!

Строитель. Ужасная концепция, так как она побуждает нас создавать и использовать большие, сложные объекты. Если вам нужен строитель, значит, в вашем коде что-то не так. Переработайте его так, чтобы любой объект можно было легко создавать через его конструкторы.

Цепочка обязанностей. Кажется неплохим.

Команда. Это нормально.

Компоновщик. Хороший шаблон; также посмотрите это.

Объект передачи данных. Это просто позор.

Декоратор. Мой любимый. Я настоятельно рекомендую его использовать.

Фасад. Плохая идея. В ООП нам нужны только объекты, а не фасады для них. Этот шаблон проектирования очень процедурный по своей сути, так как фасад - это всего лишь набор процедур.

Фабричный метод. Этот кажется нормальным. Он плох!

Легковес. Это обходное решение, насколько я понимаю, поэтому это не хороший шаблон проектирования. Я бы рекомендовал не использовать его, если нет действительно критической проблемы производительности. Но называть это шаблоном проектирования… никак нет. Исправление проблемы производительности в Java? Да.

Фронт-контроллер. Ужасная идея, как и весь MVC. Он очень процедурный.

Интерпретатор. Это нормально, но мне не нравится название. “Выражение” было бы гораздо лучшей альтернативой.

Итератор. Плохая идея, так как он изменяемый. Было бы намного лучше иметь неизменяемые “курсоры”.

Ленивая инициализация. Это нормально.

Маркер. Это ужасная идея, вместе с отражением и приведением типов.

MVC. Плохая идея, так как она очень процедурная. Контроллеры - это ключевой сломанный элемент в этой концепции. Нам нужны реальные объекты, а не процедурные контроллеры.

Посредник. Мне это не нравится. Несмотря на то, что это кажется методикой снижения сложности и связанности, она не является действительно объектно-ориентированной. Кто такой этот посредник? Просто “канал” между объектами? Почему объекты не могут общаться напрямую? Потому что они слишком сложные? Сделайте их меньше и проще, а не придумывайте этих посредников.

Мементо. Эта идея предполагает, что объекты изменяемы, что я в принципе против.

Модуль. Если Википедия права насчет этого шаблона, это что-то еще более ужасное, чем Синглтон.

Мультитон. Очень плохая идея. То же самое, что и Синглтон.

Null Object. Хороший шаблон. Кстати, посмотрите, почему NULL плохо.

Пул объектов. Хороший шаблон.

Наблюдатель. Идея хорошая, но название плохое, так как оно заканчивается на -ER. Гораздо лучше было бы “Источник” и “Получатель”. Источник генерирует события, а Получатель их прослушивает.

ORM. Это ужасно и “оскорбительно”; посмотрите это.

Прототип. Хорошая идея, но что она имеет общего с ООП?

Прокси. Хороший шаблон.

RAII. Это действительно хорошо, и я настоятельно рекомендую его использовать.

Слуга. Очень плохая идея, потому что она очень процедурная.

Одиночка. Это король всех анти-шаблонов. Избегайте его любой ценой.

Спецификация. Это нормально.

Состояние. Хотя это не подразумевается, я считаю, что в большинстве случаев использование этого шаблона приводит к изменяемости, характеристике кода, против которой я в общем случае возражаю.

Стратегия. Хороший шаблон.

Шаблонный метод. Неправильно, так как реализация наследования - это процедурно.

Посетитель. Довольно процедурная концепция, которая рассматривает объекты как структуры данных, которыми мы можем манипулировать

У меня также нет ничего против шаблонов параллелизма; все они хорошие, поскольку они почти не имеют отношения к объектно-ориентированному программированию.

Если вы знаете другие (анти-)шаблоны проектирования, сообщите мне в комментариях ниже. Я добавлю их сюда.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 13:40

sixnines availability badge   GitHub stars