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