понедельник, 8 ноября 2010 г.

Что такое Framework

Слово Framework стало входить в обиход, пожалуй, в начале 2000х с приходом на рынок .NET Framework, разного рода Spring и Hybernate и популяризации MVC шаблонов проектирования и всякого аспектно-ориентированного программирования.
В связи с модностью технологий с которыми обычно связывают слово Framework слово сие стали вставлять куда ни попадя, что явно приводит к некоторому непониманию, что именно скрывается за этим словом. Так что же такое Framework?
В общем случае(если взять определение из википедии) - это каркас приложения или программной системы. Звучит прикольно, но слишком уж расплывчато. Будем разбираться :)

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

Самое большое заблуждение, что Framework это просто набор программных компонент, облегчающих разработку. На самом деле - для такого набора компонент давным-давно придумали другой термин - библиотека(toolkit если хотите). Так что если вы написали кучу классов, которые повсеместно помогают вам писать код - то написали вы не Framework, а всего-навсего библиотеку.
Если обратиться к статьям в интернетах и разным умным книжкам, то самым часто упоминаемым примером фреймворка называют CMS системы(что это такое - думаю не стоит освещать в этой заметке). Идем дальше.
Так если фреймворк это не наборы классов/функций/врапперов, то что же это такое?
Так вот framework, товарищи, это набор средств для проектирования и разработки приложения. Чувствуете разницу? Просто набор классов на процесс проектирования никак не влияет.
Приведу умную цитату:
"When you use a toolkit, you write the main body of the application and call the code you want to reuse. When you use a framework, you reuse the main body and write the code it calls."
Очень хорошим, увы не моим, примером фреймворка можно считать компилятор(это если глобально). Еще один пример, уже приземленнее, всем известный MFC(для любителей Borland/CodeGear/Embarcadero - VCL).
Так что еще раз повторюсь - Framework это не набор классов, библиотек, функций, облегчающих разработку(иначе бы любое API называли фреймворком), а нечто более широкое. Он не только облегчает процесс написания ПО, но и диктует как это самое ПО должно проектироваться.
PS: с точки зрения автоматизации тестирования Automation Framework это не набор средств для автоматизации какого нибудь конкретного приложения, а набор средств для автоматизированного тестирования любого типичного функционала. Т.е. если ваш "фреймворк" упрощает автоматизацию какого-то конкретного программного продукта - это, скорее всего, либо toolkit либо wrapper. А если он упрощает автоматизацию, например, любого GUI приложения - это framework. Почувствуйте разницу. Хороший пример автомейшен фреймворка - Selenium.

PPS: для интересующихся(осторожно много умных слов)
http://www.codeproject.com/KB/architecture/WhatIsAFramework.aspx
http://en.wikipedia.org/wiki/Software_framework
http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
http://ru.wikipedia.org/wiki/Model-View-Controller
Никого не призываю бросить все и начать использовать фреймворки - просто решил уточнить терминологию :)

Комментариев нет: