В объектно-ориентированной программе: Сколько абстракций слишком много? Насколько это правильно?
Я всегда был орешком и болтовней вроде парня. Я понял концепцию высоких уровней инкапсуляции и абстракции, но всегда чувствовал инстинктивно, что добавление слишком большого количества просто путало бы программу.
Я всегда старался снимать за абстракцию, которая не оставляла пустых классов или слоев. И где в сомнении, вместо добавления нового слоя в иерархию, я попытался бы вставить что-то в существующие слои.
Однако недавно я столкнулся с более абстрактными системами. Системы, в которых все, что может потребовать представления позже в иерархии, становится впереди. Это приводит к множеству пустых слоев, которые поначалу кажутся плохими. Однако, во-вторых, я понял, что оставляя эти пустые слои, вы получаете больше мест, чтобы заглядывать в будущее без особого рефакторинга. Это дает вам большую возможность добавлять новые функции поверх старого, не делая почти столько работы, чтобы настроить старый.
Два риска этого, похоже, состоят в том, что вы можете получить нужные вам слои. В этом случае все равно придется выполнять существенный рефакторинг для расширения кода и по-прежнему будет иметь тонну неиспользуемых слоев. Но в зависимости от того, сколько времени вы потратите, приступив к первоначальным абстракциям, шансу завинчивания и времени, которое может быть сохранено позже, если вы это исправите - все равно стоит попробовать.
Другим риском, о котором я могу думать, является риск превысить его и никогда не нуждаться во всех дополнительных слоях. Но так ли это так плохо? Являются ли дополнительные классы классов настолько дорогими, что это большая потеря, если они никогда не используются? Самые большие расходы и потери здесь были бы временем, которое было бы потеряно вперед, придумывая слои. Но многое из этого времени может быть сохранено позже, когда можно работать с абстрактным кодом, а не с более низким уровнем кода.
Итак, когда это слишком много? В какой момент пустые слои и дополнительные "могут понадобиться" абстракции становятся излишними? Как мало мало? Где сладкое пятно?
Есть ли какие-либо надежные эмпирические правила, которые вы нашли в ходе своей карьеры, которые помогут вам судить о количестве требуемой абстракции?