Часто используются хорошие абстракции
Хорошие абстракции упоминаются в 2 или более местах вашего программного обеспечения.
Примеры:
- Функции с 2+ сайтами вызовов.
- Абстрактный класс с 2+ конкретными классами.
- Интерфейсы с 2+ реализациями.
- Обобщения с 2+ экземплярами
- Библиотеки с 2+ пользователями.
- и т.д.
Абстракция, на которую ссылаются в 2 или более местах, помогает уменьшить размер кода, выделяя общие вещи, и это хорошо.
Но если у вас много абстракций, на которые ссылаются только один раз, тогда
Это хороший шанс, что абстракция не нужна.
Некоторые примеры появления ненужных абстракций:
- Написание объектного счастливого кода (интерфейсы и абстрактные классы везде имеют только 1 реализацию или конкретизацию). Эти интерфейсы и абстрактные классы не нужны (на этом этапе разработки). Принцип ЯГНИ.
- Кто-то строит «блестящий новый» интерфейс на старом, где новые функции после некоторого преобразования вызывают только старый интерфейс. Вы можете себе представить, какой большой беспорядок в результате, если вы повторите это несколько раз. В этом случае старые функции будут иметь единый сайт вызова, поэтому они не нужны. Вам нужно переместить код из старых функций в новую или не писать новую и модифицировать старую.
Некоторые примеры действительно хороших абстракций:
- Уровень аппаратной абстракции: предоставляет единый интерфейс для приложений, поэтому им не нужно разрабатывать код для каждого типа оборудования.
- Файловая система: Неважно, используете ли вы FAT, NTFS, EXT3. Он позволяет вам использовать файлы и каталоги, а драйвер файловой системы сделает все остальное.
- Язык C: вам не нужно портировать вашу программу для каждой архитектуры ЦП. Просто скомпилируйте это.
Итак, чтобы ответить на ваш вопрос прагматично: Абстракции плохие, когда на них ссылаются менее чем из 2 мест .
Что касается модульности, то она субъективна: вы можете организовать свой код как угодно. Если исходный код вашей библиотеки находится в одном исходном файле, это не делает его хуже, чем если бы вы поместили его в несколько сотен файлов.
Оценивая свои абстракции как хорошие или плохие, всегда учитывайте общую картину: весь проект, всю линейку продуктов и т. Д.