вторник, 16 августа 2011 г.

Семь раз отмерь...

Интересно, откуда пошла поговорка? Но речь не об этом.

Если жить в соответствии с дао, я имею ввиду TDD и рефакторинг, то методы надо делать меньше. Как сказал Роберт Мартин - 'нет, методы надо делать еще меньше'. И классы в соответствии с SRP надо делать меньше.

Я никогда не встречал проектов, которые бы разрабатывались в полном соответствии с этой концепцией, но чувствую проблемы. Проблемы заключаются в том, что количество таких объектов может уйти далеко за рамки 7+-2, которые человек в состоянии эффективно анализировать.

Разрастание количества классов может привести к плохо обозримой кодовой базе, в следствии чего увеличится дублирование кода. Что же делать?

Очень просто - необходимо распространять принцип 7+-2 дальше. не более 7+-2 классов в модуле, не более 7+-2 модулей в компоненте, не более 7+-2 компонентов в приложении. Это даст хорошую локализацию функционала, но опять таки может привести к дублированию, потому что усложняется расшаривание общего кода. Что же делать?

Общий код (тоже 7+-2 :) ) нужно выносить в библиотеки...

И осталось только все это аккуратно и гармонично расположить по каталогам проекта. В древовидном виде, конечно.

Собственно к цифре 7+-2 надо относится прагматично. Не стоит на каждый чих вести отсчет. Достаточно подсчитывать определяющие поведение классы, методы или что похуже. Утилитарные однострочники не достойны считаться полноценными классами.

Очень кстати удобно сделано в linux kernel - каждый подкаталог в нем сворачивается в объектный бандл, один объектный файл, который объединяет в себе все скомпилированное содержимое каталога.

А сколько классов/файлов в одном каталоге живет у вас?

2 коммент.:

afiskon комментирует...

Я пишу на Perl и иногда на Haskell. У нас все намного проще - http://www.modernperlbooks.com/mt/2011/08/10-years-later-only-250-sloc.html#comment-979

Andrey Valyaev комментирует...

В любом языке присутствуют некоторые единицы трансляции/интерпретации.

Если в один файл напихать много функций - это тоже антипаттерн. :)

ИМХО 300-500 строк нормально, больше уже плохо.