Запах кода 136 — Классы с одним подклассом

Быть обобщенным и предвидеть будущее — это хорошо (снова).

TL;DR: Не обобщайте слишком сильно

Проблемы

  • Спекулятивный дизайн

  • Сложность

  • Чрезмерная инженерия

Решения

  1. Удалите абстрактный класс, пока не появится больше примеров

Контекст

В прошлом программисты говорили нам проектировать для изменений.

В настоящее время мы продолжаем следовать научному методу.

Всякий раз, когда мы находим дублирование, мы его удаляем.

Не раньше.

Ни с интерфейсами, ни с классами.

Образец кода

Неправильный

class Boss(object):
    def __init__(self, name):
        self.name = name 

class GoodBoss(Boss):
    def __init__(self, name):
        super().__init__(name)

# This is actually a very classification example
# Bosses should be immutable but can change their mood
# with constructive feedback
Вход в полноэкранный режим Выйти из полноэкранного режима

Правильно

class Boss(object):
    def __init__(self, name):
        self.name = name  

# Bosses are concrete and can change mood
Войти в полноэкранный режим Выход из полноэкранного режима

Обнаружение

[X] Автоматическое

Это очень просто для наших редакторов, поскольку они могут отследить эту ошибку во время компиляции.

Исключения

Некоторые фреймворки создают абстрактные классы в качестве подложки для построения наших моделей на их основе.

Подклассификация никогда не должна быть нашим первым вариантом.

Более элегантным решением будет объявление интерфейса, поскольку он менее связан.

Теги

  • Дизайн поверх

Отношения

Запах кода 114 — Пустой класс

Maxi Contieri ・ Feb 12 ・ 2 min read

#oop #учебник #cleancode #webdev

Code Smell 11 — Подклассификация для повторного использования кода

Maxi Contieri ・ Oct 30 ’20 ・ 2 min read

#oop #codenewbie #учебник

Code Smell 43 — Субклассификация бетонных классов

Maxi Contieri ・ Dec 5 ’20 ・ 1 min read

#oop #codenewbie #tutorial #webdev

Запах кода 92 — Изолированные имена подклассов

Maxi Contieri ・ Oct 11 ’21 ・ 2 min read

#poo #webdev #python #javascript

Запах кода 135 — Интерфейсы с одной реализацией

Maxi Contieri ・ May 26 ・ 2 min read

#java #программирование #webdev #учебник

Заключение

Мы должны ждать абстракций и не быть творческими и спекулятивными.

Кредиты

Фото Benjamin Davies on Unsplash


Написание класса без его контракта было бы похоже на производство инженерного компонента (электрической цепи, чипа VLSI (Very Large Scale Integration), моста, двигателя…) без спецификации. Ни один профессиональный инженер даже не подумает о такой идее.

Бертран Мейер

Программная инженерия Великие цитаты

Макси Контьери ・ Dec 28 ’20 ・ 13 min read

#codenewbie #программирование #цитаты #программное обеспечение

Эта статья является частью серии CodeSmell.

Как найти зловонные части вашего кода

Maxi Contieri ・ May 21 ’21 ・ 7 min read

#codenewbie #учебник #качество кода #новички

Оцените статью
Procodings.ru
Добавить комментарий