Jump to content

Библиотеки и фреймворки.


s0rr0w
 Share

Recommended Posts

Поговорим про моду. Мода бывает на одежду, на автомобили, на все что угодно. Веб-технологии не исключение.

Сегодня царит мода на фремворки. Они рождаются как грибы после дождя. Каждый стремится сделать что-то эдакое, чего не делал до него никто, но по сути они все одинаковы. На форумах разгораются священные войны относительно того, какой из фреймворков лучше, удобнее, быстрее, компактнее. Тонны флуда генерируются каждый день, увлекая за собой все больше и больше людей. Люди носятся с фреймворками как курицы с яйцом.

А теперь немного холодного душа. Давайте посмотрим на все со стороны. Мы слышим лозунг "Делай больше, пиши меньше". Казалось бы, полезное изречение. Но на деле оказывается все намного хуже. Да, вместо того, чтобы написать два миллиона строк, с помощью фреймворка можно написать всего полтора миллиона. Это же экономия какая, воскликните вы, и будете только отчасти правы. Потому что вы все равно напишите полтора миллиона строк, вместо десяти тысяч.

Фреймворк позволяет меньше писать, но он не умеет думать за вас. Вместо того, чтобы посидеть и подумать, кодер выбирает наипростейший метод решения задачи - сесть и написать все в лоб. На мелких задачах эффективно, но мелких задач в больших проектах нет.

Возьмем простой пример. Тот же форум. При нажатии на кнопку "ответить" внизу показывается скрытая форма для ответа. Какое решение выберет тру-фреймворк программист? Установить любимый фреймворк и сделать финт ушами. Каждой кнопке присваиваем ID, внизу делаем скрытый блок со своим ID, перебираем все кнопки и навешиваем обработчики через addEventListener, который будет откывать или закрывать блок, попутно присваивать какому-то хиддену значение ID поста. Решение не сильно эффективное, так как есть ряд трудностей. AddEventListener не может "нести" дополнительные данные при присвоении, а значит, чтобы идентифицировать, на какой именно пост делается ответ, придется городить огород. Метод упрощения - использовать столь некошерный и не-тру метод onclick обработчиков. Код становится проще в несколько раз. Остается только найти нужную ноду и хидден и сделать примитивные действия. Окей. Все хорошо, разработчик счастлив.

Но форум без плагинов - почти нонсенс. В дело вступает вторая фаза - добавление дополнительного функционала. Допустим, по кнопке "ответить" надо добавить еще пару функций. Например, захотелось сделать ответ прямо возле поста, причем можно делать несколько ответов одновременно. Упс. Алгоритм решения прост - нужно сделать клон блока с формой, поставить его рядом с постом, заполнить данными. И вот тут начинается коматоз. Первая проблема, которая возникает - идентификация блоков. Это можно делать путем установки ID, className, или использовать поиск бульбашки, при которм нужный блок будет найден путем подъема по дереву вверх. Окей, справились. Вторая проблема - идентификация уникальных нод внутри блока с формой. Нельзя просто клонировать, нужно клонировать с новыми, уникальными идентификаторами, иначе ничего работать не будет. Справились. Нужно еще навешивать обработчики на кнопку "отправить", потому что попытка отправить кусок не тех данных равно полной неработоспособности скрипта. Дальше развивать драматические события не имеет смысла, я думаю всем и так понятно, что фремворк не спас от всех проблем, которые возникли в процессе доработки функционала.

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

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

Link to comment
Share on other sites

  • Replies 55
  • Created
  • Last Reply

Top Posters In This Topic

Фреймфорки еще не использовал, т.к. не было необходимости.

Сабж прочитал и думаю что юзать их нужно, но только тогда когда надо. Этакая "Золотая середина".

Только гдеж ее найти? ;)

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

Link to comment
Share on other sites

Я считаю, что фреймворки можно использовать. Это что-то вроде инструментария, который всегда под рукой. Здесь есть почти все, что нужно для разработки сайта (остальное можно самому дописать). Фреймворк облегчает работу программиста, освобождая его от кучи рутинной работы. Конечно, если сайт на две странички, то использовать фреймворк просто неэффективно, а вот при разработке среднего или большого сайта можно использовать фреймворк с большим успехом.

Link to comment
Share on other sites

Я считаю, что фреймворки можно использовать. Это что-то вроде инструментария, который всегда под рукой. Здесь есть почти все, что нужно для разработки сайта (остальное можно самому дописать). Фреймворк облегчает работу программиста, освобождая его от кучи рутинной работы. Конечно, если сайт на две странички, то использовать фреймворк просто неэффективно, а вот при разработке среднего или большого сайта можно использовать фреймворк с большим успехом.

Да что вы говорите? Правда?

1. Покажите мне кучу рутиной работы, которую может облегчить фреймворк. Реальный пример.

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

Давайте общаться предметно!

Link to comment
Share on other sites

Да что вы говорите? Правда?

а вы как думали?

1. Покажите мне кучу рутиной работы, которую может облегчить фреймворк. Реальный пример.

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

$connect = mysql_connect($host,$user_name,$user_pass);
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='utf8'");
mysql_query("SET character_set_results='utf8'");
mysql_select_db($dbname, $connect);
$query = mysql_query("SELECT * FROM tables");
$table=array();
while($res=mysql_fetch_array($query, MYSQL_ASSOC))
$table[]=$res;
mysql_close($connect);

рутина или нет писать столько повторяющегося кода?

возьмем для примера фреймворк cakephp

//модель для таблицы (пример про блог)
class Post extends AppModel
{
var $name = 'Post';
}
//в контроллере для выбора всех значений из таблицы
$this->Post->findAll();

меньше рутинной работы или нет?

2. Покажите мне большой проект...

а вы мне покажите большой проект (не важно на фреймворке или без), который

код легко читаем, понятен, не требует комментариев, легко можно изменить или дополнить что-либо

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

Link to comment
Share on other sites

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

рутина или нет писать столько повторяющегося кода?

А если код вынести в отдельную функцию? Это ведь можно сделать БЕЗ фреймворка!

меньше рутинной работы или нет?

Расширьте запрос. Пусть он будет выбирать не все подряд, а только нужное. Причем нужно сформировать два разных списка, например, отдельно все свежие посты, отдельно - все несвежие. Вперед!

Ловушка заключается в том, что на примитивных примерах все просто. А как только нужно написать что-то больше, упс... начинаются танцы с бубном.

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

В коде нашего продукта почти нет комментариев. Их менее 1%. Не используется ни одного стороннего фреймворка. И в коде почти всего проекта новый программер разобрался меньше чем за неделю.

Ведь достаточно применять несколько соглашений программеров, и все становится понятно всем.

Link to comment
Share on other sites

А если код вынести в отдельную функцию?

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

Расширьте запрос. Пусть он будет выбирать не все подряд, а только нужное.

Вы сами можете сформировать нужный запрос, с помощью того-же метода findAll, достаточно указать нужный conditions. И не нужны никакие танцы с бубном.

В коде нашего продукта почти нет комментариев. Их менее 1%.

Я обычно комментирую все классы и методы в стиле phpDoc. Очень удобная штука для генерации документации. Советую вам попробовать.

Не используется ни одного стороннего фреймворка. И в коде почти всего проекта новый программер разобрался меньше чем за неделю.

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

Link to comment
Share on other sites

Я обычно комментирую все классы и методы в стиле phpDoc. Очень удобная штука для генерации документации. Советую вам попробовать.

Спасибо, не надо. Лучшие комментарии - это сам код.

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

К сожалению, показать не могу. Закрытый код.

Почитайте книги по экстремальному программированию.

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

Link to comment
Share on other sites

А один из постулатов не экстремального программирования говорит, что комментарии и документация должны появляться одновременно с кодом или до появления кода. Каждому - свое. Комментарий может в нескольких строках выразить то, для понимания чего понадобиться прочитать пару десятков строк кода. Просто удобнее и быстрее. Хотя сам код, конечно, должен поддаваться пониманию и без комментариев.

Link to comment
Share on other sites

@s0rr0w - ты мозго** еще тот

по сабжу - я любитель написать свой велосипед, но и не отказываюсь от качественных "локальных" фреймворков типа TinyMCE все что слабже пишется на коленке, все что сложнее отметается нафиг

Link to comment
Share on other sites

А один из постулатов не экстремального программирования говорит, что комментарии и документация должны появляться одновременно с кодом или до появления кода.

У нас так и есть. ;) Не на все случаи, но на большинство сложных - да.

@s0rr0w - ты мозго** еще тот

Я тебя тоже люблю.

по сабжу - я любитель написать свой велосипед, но и не отказываюсь от качественных "локальных" фреймворков типа TinyMCE все что слабже пишется на коленке, все что сложнее отметается нафиг

Кто-то правильно на этом форуме написал, что любой фреймворк меняет мышление программиста, и на текущий момент времени нынешние фреймворки, меняют это мышление не в лучшую сторону. Легкие инструменты дают ощущение всесильности и вседозволенности, за легкостью теряется суть и цель.

Link to comment
Share on other sites

Спасибо, не надо. Лучшие комментарии - это сам код.

Я имел в виду документацию к коду. Если иметь привычку писать комменты в стиле phpDoc, то из него оч. легко создается описание API

Почитайте книги по экстремальному программированию.

Про экстремальное програмирование читал, но на практике не применял его.

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

Это можно сказать про любой нормальный код и не важно разработан он через экстримальное программирование или по другой методике. Но легче прочитать простое описание API, чем смотреть весь код.

я любитель написать свой велосипед

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

Кто-то правильно на этом форуме написал, что любой фреймворк меняет мышление программиста, и на текущий момент времени нынешние фреймворки, меняют это мышление не в лучшую сторону. Легкие инструменты дают ощущение всесильности и вседозволенности, за легкостью теряется суть и цель.

Почти весь прогресс человечества был направлен на облегчение работы челвека. Человеку надоело копать руками землю - он придумал палку-копалку, человеку надоело ходить пешком - он придумал велосипед, человеку надоело думать самому - он придумал компьютер. Т.е. почти все, что придумал человек было создано с целью избавления его от забот. Фреймворки и библиотеки в программировании не исключение. Они тоже были созданы для облегчения работы. А если у кого-то возникает ощущение всесильности и вседозволенности при использовании фреймворков, то это только говорит о низком уровне этого программиста и больше ни о чем.

Link to comment
Share on other sites

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

про то и речь ;)

Link to comment
Share on other sites

Почти весь прогресс человечества был направлен на облегчение работы челвека. Человеку надоело копать руками землю - он придумал палку-копалку, человеку надоело ходить пешком - он придумал велосипед, человеку надоело думать самому - он придумал компьютер. Т.е. почти все, что придумал человек было создано с целью избавления его от забот. Фреймворки и библиотеки в программировании не исключение. Они тоже были созданы для облегчения работы. А если у кого-то возникает ощущение всесильности и вседозволенности при использовании фреймворков, то это только говорит о низком уровне этого программиста и больше ни о чем.

Давайте возьмем простой пример. Наверняка всем известен плагин под названием LightBox. У него есть младший брат - Slimbox.

Код написан под фреймворк. В лучшем случае необходимо примерно 35кб текста, чтобы реализовать то, что можно сделать намного проще и меньше по размеру. Спрашивается, это того стоит? Разрабатывать проще, а толку - не намного больше.

Второй пример, был плагин "аккордеон", тоже написан при помощи какого-то JS фреймворка. Все бы хорошо, только вот в ИЕ7 была ошибка, которую нереально исправить за три клика. Мало того, ее и отловить тяжело. В итоге 25кб кода было заменено на три строчки. Красивостей чуть меньше, зато стабильности в несколько раз больше.

Link to comment
Share on other sites

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

Я и не юзаю. Ко мне обращаются с проблемами с этими самыми фреймворками.

Написать свой? Давно написан, но то, что написано, не является фреймворком в том виде, который привыкли видеть все. Это надстройка. Больше логическая, чем реальная.

Скоро я его опубликую, посмотрим на реакцию. ;)

Link to comment
Share on other sites

Я и не юзаю. Ко мне обращаются с проблемами с этими самыми фреймворками.

Написать свой? Давно написан, но то, что написано, не является фреймворком в том виде, который привыкли видеть все. Это надстройка. Больше логическая, чем реальная.

Скоро я его опубликую, посмотрим на реакцию. ;)

Ждем с нетерпением. Может быть это будет революция в программировании? :D

Link to comment
Share on other sites

Ждем с нетерпением. Может быть это будет революция в программировании? ;)

Насчет революции не уверен. Но чем черт не шутит.

По крайней мере эффективность его при применении в сложных проектах очень высока. Повторяемость кода великолепная.

Link to comment
Share on other sites

Согласен, легче написать свое оптимизированное, чем пользовать то что написал до тебя с кучей лишних ф-ций...

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

Естесственно, если вы подросток и вам срать на своё время, можно повыпендриваться над кодом. А когда важны скорости и результат - разговор другой.

На любой тематической конференции вы обязательно хоть единожды услишите старую-добрую догму: "Не изобретайте. Улучшайте."

А что, действительно, шли бы нафиг эти профессионалы со своими суждениями... Да ?))))

Особенно меня выносят люди, которые утверждают, что лучше писать самому, только потмоу что ленятся читать документацию или вовсе не знают английского языка (сталкивался не раз). Убивать об стену.

Edited by XAOPT
Link to comment
Share on other sites

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

Вот оно, самое распространенное заблуждение!

Задачи локальных систем - это не десять строк. Это даже не сто строк, и не тысяча.

Текущие JS-фреймворки ведут в никуда. Упрощают работу в одном, но усложняют в другом месте. Потому что мышление, на котором базируется сам фреймворк, искажено по сути. Писать меньше - не значит лучше.

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

Link to comment
Share on other sites

Потому что мышление, на котором базируется сам фреймворк, искажено по сути.

Вам в религию надо, а не с фреймвёрками разбираться.

Не вижу взаимосвязи между мышлением кодера и фреймвёрком. Юзать чужой код и соображать головой что делаешь - можно.

Писать меньше - не значит лучше.

Про экономию времени я, кажется, говорил. Посмотрел бы я, как бы вы решили за три дня (хотя бы) задачи, которые решаются с помощью extjs (например) за сутки. Имея в качестве стартовой площадки нуль кода.

Резюме: считаю что истинный смысл топа - флуд и кичь.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy