Pull to refresh

Как насчёт класть каждую функцию в свой файл?

Reading time3 min
Views6.8K

Минусующим: я в курсе что такое ООП и постоянно использую его в разработке. Или из-за чего вы там минусуете с пренебрежением к подобному подходу? Как это может быть ни удивительно для вас, но проекты можно писать в том числе и используя простые функции, вместо запихивания всего и вся в различные классы. Бывает множество ситуаций, когда функцию написать удобнее, чем городить целый класс для решения небольшой проблемы.




Есть один интересный подход при разработке проектов, который мне в последнее время стал нравиться. Суть простая: когда вы пишете функции — кладёте каждую из них в свой отдельный файл. Я сейчас имею ввиду те функции, которые используются во многих местах вашего проекта, формируя таким образом некоторую "библиотеку" методов.


Мало кто поступает таким образом в современном мире. Какие же профиты от такого подхода? А вот какие.


Красивые url'ы на любую функцию проекта


Многие из вас скорее всего неоднократно отправляли друг другу ссылки на различные отрезки кода на Github'е, вроде такого. Сегодня эта ссылка указывает точно на метод под названием booleanConditional. А вот на что эта ссылка будет указывать спустя пол года — на это мы посмотрим спустя пол года :) Ну, рискну предположить, что через пол года там будет мешанина какого-то совсем другого кода, никак не связанного с booleanConditional.


Если ваша функция будет лежать в своём собственном файле, то никаких смещений со временем не случится. Даже спустя долгое время после переработки проекта, ваша ссылка, скорее всего, не потеряет своей актуальности и будет указывать на всё ту же функцию, причём указывать она будет именно на её текущее актуальное содержимое.


Разве не прелесть?


Инкапсуляция кода и документации


Теперь у вас есть целый файл для вашей функции, в котором можно чего только про неё не понаписать! Всё, что будет написано в этом файле — относится только к этой функции. Описать конструкции импорта и использования нужных библиотек для её работы? Пожалуйста. Расписать большой комментарий, который детально расскажет, как должна вести себя ваша функция? Почему нет? Написать внизу примеры использования, завести обсуждение с коллегами о том, как можно её доработать? Оставить в комментариях прошлый вариант данной функции, чтобы, при необходимости, вернуться к нему обратно? Да пожалуйста, какие проблемы: берите и пишите сколько влезет.


Наличие отдельного файла для каждой функции сильно расширяет пространство для творчества. При этом, всё будет выглядеть очень удобно и логично. Когда мы описываем большое количество функций в одном большом жирном файле, мы не можем позволить себе подобные вольности.


Удобная "история жизни" каждой функции в VCS


Все мы знаем, что современные системы контроля версий позволяют смотреть историю изменения любого файла проекта. А теперь подумайте о том, как удобно может быть иметь историю жизни каждой его функции. Это также становится возможным просто благодаря тому, что мы выделили каждой своей функции по отдельному файлу.


Удобные поиск и навигация по функциям проекта


В нашем текущем проекте всё разбито следующим образом: есть ядро проекта и его модули. У ядра есть папка functions, в которой находятся ещё пять папок. Выглядит это следующим образом:



Каждый модуль проекта имеет свои собственные функции, разбитые примерно таким же образом.


Теперь найти нужную функцию проекта стало в несколько раз проще, при этом можно использовать почти любой редактор кода: главное чтобы он умел искать по названию файла в проекте. Разделение функций на группы по их областям назначения также помогает увеличить порядок проекта. Да и просто, когда всё разложено таким образом, анализировать существующие созданные методы проекта становится намного легче.


Недостатки


По идее, если мы ведём речь о PHP-проекте, то на продакшене, по хорошему, надо собирать все функции в один файл и загружать его одного вместо кучи файлов. Придётся написать немного кода для решения этой проблемы производительности (если это действительно вдруг станет проблемой), но это ведь не вопрос для вас, правда, мой друг-хабравчанин?


В мире JavaScript я никаких проблем не вижу. Там уже давно все адекватные люди компилируют исходники различными готовыми инструментами в один файл.


Насчёт остальных языков программирования я не знаю.




Вот такие пироги. На мой взгляд, так работать с проектом намного приятнее. А какое мнение по данной теме имеете вы?

Tags:
Hubs:
-7
Comments61

Articles