Зачем использовать фреймворк: мои доводы.

0
Зачем использовать фреймворк: мои доводы.

И снова здравствуйте! Долго я ничего не публиковал. Извините, был занят. Но сегодня мой основной рабочий комп накрылся

, и не зная чем себя занять, пока он восстанавливается, я решил, что можно написать статью. Но не про свою беду с компом, а про Symfony2. Точнее про фреймворки, но и про Symfony тоже. Эта идея возникла на почве негодования относительно того, что часть моих знакомых просто не используют фреймворки. Даже в довольно больших проектах. Это странно. Странно и страшно. И потому я хочу рассказать зачем нужно перейти на фреймворк с голого языка (в частности с PHP).
Зачем фреймворк?

Для начала проясним ситуацию и обозначим объект обсуждения для того чтобы было от чего отталкиваться:
Фреймворк (framework) — набор программных средств для облегчения разработки проекта путём решения многих рутинных задач программиста и объединение различных компонентов проекта в единый каркас.
Отсюда следует, что фреймворк не что иное как надстройка над языком дающая дополнительные возможности и абстрагирующая разработчика от мелочей мирской суеты, давая сосредоточиться непосредственно на логике самого приложения, а не на тонкостях реализации.
Может быть для кого-то это звучит плохо, кто-то хочет держать всё под контролем и все тонкости реализации должны быть учтены… Такого не бывает. За 100500 зайцами погонишься, хорошо если 10 поймаешь. А современные приложения это не что иное как многогранные системы, где тысячи нюансов. Да, если команда разработчиков достаточно большая и сильная, то можно написать всё с нуля. Но если ещё подумать, то скорее всего будет написан очередной велосипед фреймворк решающий всё те же задачи, но не факт что лучшим образом (зависит от команды). Потому в большинстве случаев даже для большой команды целесообразней использовать уже готовое и отлаженное решение, уже не говоря про разработчиков-одиночек, которые денно и нощно пытаются создать свои стартапы.
Я прекрасно понимаю, что есть много готовых решений для каких-то конкретных задач. Есть несметные толпы CMS различного уровня, которые по сложности внутренней организации, порой, взрывают неподготовленный мозг. Но всегда перед началом очередного проекта нужно сесть и подумать. Подумать над тем, что ты от него хочешь и что будет с ним в будущем. В самом простом варианте ваши рассуждения должны пойти по одному из следующих направлений:
Проект я делаю на один раз для решения конкретной задачи без цели особо сильно развивать его в будущем.
Мой проект — это только начало! Дальше — больше! И это не пустые слова, а чёткие и реализуемые планы!
Очевидно, что для людей из первой категории скорее всего подойдут какие-то уже готовые решения, которые помогут сэкономить и время и ресурсы, типа: блог — WordPress, Wiki-сайт — MediaWiki, простенький интернет-магазин — php5shop и др. А вот люди из второй категории хоть и могут обойтись готовым решением на первоначальном этапе, но в дальнейшем скорее всего будут ощущать существенные затруднения в развитии своего проекта из-за того, что узко-специализированное ПО просто не достаточно гибко, чтобы покрыть весь класс необходимых задач. Скорее всего им потребуется писать своё решение под свои нужды, но не обязательно делать это с нуля, на помощь придёт любой фреймворк!
Хочу отметить, что нужно чётко себе представлять будущее своего проекта и грамотно оценивать свои возможности. Я понимаю, что почти каждый скажет, что он хочет развивать свой проект и что он будет его развивать. Но я вам отвечу, что если к этому выводу вы пришли быстро, то стоит ещё раз подумать и взвесить все ЗА и ПРОТИВ, особенно во временном разрезе: что будет с проектом через год-два-три? Что будет с вами за это время? будете ли вы его поддерживать всё это время? Решение должно основываться на логике, а не на эмоциях. Спок вам в помощь!

Какой выбрать фреймворк?

Если ваша задача всё же требует привлечения фреймворка, то можете продолжать читать дальше, в противном случае можно остановиться.
Какой же фреймворк выбрать? Можно рассуждать по-разному, но я рекомендую придерживаться следующего пути: используй тот инструмент, который ближе. Другими словами: то что быстрее в освоении и будет ваш выбор. Почему так? Да, скорее всего фреймворки на одних языках лучше, чем на других, а применение одних паттернов более true, чем других. Но тут всё та же история про 100500 зайцев. Жизнь слишком коротка, чтобы тратить её на изучение ВСЕГО. Во всём нужна мера и трезвая оценка своих возможностей. Отсюда я выведу два нехитрых правила, которых стоит придерживаться при выборе фреймворка:
Язык, на котором написан фреймворк, желательно уже знать и как можно глубже. Я понимаю, что можно всё изучить, но без надлежащего опыта работы с новым языком можно наломать дров, как бы вы там теорию не шерстили.
Паттерны, которые использует фреймворк, должны быть вам знакомы, а ещё лучше, если вы их сами уже реализовывали. Это поможет быстрее преодолеть порог вхождения, понять внутреннее устройство фреймворка и начать его использовать в полную силу.
Вот и всё. На самом деле это довольно очевидные правила, но почему-то многие их игнорируют и идут по пути наибольшего сопротивления. А потом просто разочаровываются в себе или в инструменте или ещё в чём (время-то не вернёшь).

По большому счёту, в различных энтерпрайзных языках для бизнес-приложений, типа Java или Scala, таких вещей объяснять не надо. Люди владеющие этими языками и так всё понимают и используют фреймворки по мере необходимости. А вот нижний интернет, который пишет в большинстве своём на PHP, иногда требует пояснений. Так уж исторически сложилось. И именно по этому я хочу продолжить повествование для тех кому близок PHP, и они бы хотели выбрать фреймворк именно на этом языке.

Почему Symfony2?

Как следует из подзаголовка, я хочу рассказать про Symfony2 и про то почему вам следует выбрать именно его.
Фактически, есть три фреймворка, которые заслуживают вашего внимания (можно и больше набрать, но думаю это костяк), и которые точно смогут решить все ваши задачи:
Yii
Symfony 2
Zend Framework 2

Я буду рассуждать в рамках этих трёх фреймворков. Они расположены в порядке возрастания сложности изучения. Правда, простота освоения Yii несёт за собой небольшие потери в возможностях, а вот последующие два в своих возможностях равны. Потому в соотношении простота освоения — возможности, думаю, побеждает Symfony2.
Все дальнейшие рассуждения могут привести к холивару, поскольку являются субъективными. Но я всё же продолжу. И Yii я откинуть поскольку он послабее остальных. Поэтому продолжу только с двумя оставшимися.
Чтобы не томить вас долгими рассказами личных предпочтений и впечатлений постараюсь изложить всё по пунктам и кратко. Почему на мой взгляд Symfony2 лучше Zend Framework 2:
Удобство использования. Поюзав их обоих плохой осадок остался от Zend. Symfony мне показался более логичным, удобным и гибким.
Работа с БД. Symfony 2 по-умолчанию интегрирован с Doctrine 2, чего нельзя сказать о Zend. Там конечно легко всё подключается, но всё же.
Сообщество. По ощущениям сообщество вокруг Symfony более активно и велико. Соответственно мы имеем множество решений стандартных задач, более отлаженный код, обсуждения насущных проблем, быстрое развитие и др.
Стадия разработки. Хоть сейчас оба они имеют стабильные релизы, но раньше они появились у Symfony, потому ей больше доверие. Она, вроде как, впереди. Есть даже ощущение, что Symfony2 в кое-чём (например, Dependency Injection) законодатель.
Из этого всего вытекает, что предпочтительней использовать Symfony2, особенно если это ваш первый PHP-фреймворк. Надеюсь, что это так и будет.

Заключение

Теперь когда я вас убедил использовать Symfony2 можно начать его учить. Это проще, чем вам может показаться. Есть множество ресурсов, которые вам в этом помогут (не забывайте о большом сообществе). Да, кое-что за деньги, но есть и очень много бесплатного материала.
Пожалуйста, переходите на использование фреймворков. Сделайте легче жизнь и себе и другим. Использовать чужие наработки и пытаться их улучшить — это наш путь!
На этом всё. Надеюсь я не в пустоту вещал и меня кто-то услышит. Всем удачи и успешного кодинга!
[uptolike]

LEAVE A REPLY