воскресенье, 17 апреля 2016 г.

О web-фреймворках вообще

Прошлый раз мы поставили Laravel. И он даже заработал - вывел свое приветственное сообщение в браузер. Сейчас мы попытаемся разобраться, что же это такое вообще :)
К сожалению, все мануалы по Ларавель, нагугленные мной в интернете (раз, два) ориентированы на профессионалов в веб-разработке; там сходу идет погружение в термины, такие как "роутинг", "посредники", "http-контроллеры", "фасады" и т.д.
Мне, C++ программисту с более чем 10-летним опытом, но не имеющим почти никакого опыта  в web, это вполне закономерно кажется абракадаброй (хотя я интуитивно догадываюсь о значение некоторых терминов). Конечно, внимательное прочтение имеющихся доков и гугл кое-что прояснят, но это все-же не тот подход, который мне хотелось бы применять для разработки серьезного проекта (а для несерьезного я и на чистом php могу что-нибудь накодить). Поэтому для начала разберемся с самыми основами.

Итак, что же это такое вообще - web-фреймворк?
Работу любого web-сайта обеспечивает некоторый набор программ на стороне сервера - в том числе код самого сайта (код, генерирующий страницы сайта). Этот код запускается для каждого клиента (пользователя, обращающегося на сайт из браузера). Код выполняет некоторые действия, в том числе обращения к различным базам данных, и генерирует html-страницу для пользователя.
Тот факт, что некоторая часть этого кода почти одинакова для большинства сайтов, а также общая структурная похожесть большинства сайтов как таковых, позволила выделить этот одинаковый код и создать web-фреймворки - обобщенные универсальные библиотеки серверного кода.

Фреймворки следует отличать от CMS. CMS - это системы управления контентом; это уже готовые сайты определенных типов (блог, интернет-магазин, форум и т.д.). Доработка CMS обычно сводится к разработке дизайна и возможно доустановке или настройке некоторых модулей.

CMF - это как раз web-фреймворки, более "низкоуровневые" конструкции, для работы с которыми все-же нужно программирование. Они применяются, когда вам нужна какая-то нестандартная функциональность сайта; например вы делаете какую-то браузерную игру или социальную сеть, в которой требуется сложная логика, выходящая за пределы стандартной логики "блога" или "форума". Писать такое можно и с нуля (с нуля можно написать все что угодно), но зачем писать что-то с нуля, когда оно уже написано? Использование готовых модулей и библиотек является хорошим тоном во всех языках программирования, и php тут не исключение.

В заключение пожалуй стоит пояснить отличие фреймворка от библиотеки (это общие понятия во всех языках программирования). Библиотека просто предоставляет программисту некоторые, как правило разрозненные сущности - например функции и классы. Программист может использовать их в своей программе почти как угодно.
Фреймворк задает архитектуру приложения в целом. Фреймворк - это единое целое, и программист скорее встраивается в него, как-бы заполняя своим кодом те места, которые предусмотрены для этого архитектурой фреймворка.
С этой точки зрения фреймворк дает больше чем библиотека. Это целостный каркас программы с продуманными связями между всеми ее частями, в то время как библиотека - просто куча различных деталей, большая часть из которых вполне возможно в данной конкретной программе и вовсе не нужна. Хотя конечно, и фреймворк имеет некоторые черты библиотеки: так, если вам не нужна работа с конкретной СУБД - то эта часть фреймворка и не будет входить в конечный продукт (сайт).

1 комментарий:

  1. Я бы не сказал "Фреймворк задает архитектуру приложения в целом". Архитектуру приложения задают сами разработчики.
    Вообще нет четкого понятия архитектуры приложения и тут уж как у кого в голове сложилось.

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

    ОтветитьУдалить