Фреймворк ( англ. "строительные леса", "каркас") относится к языку программирования как архитектура высотного здания относится к железобетону.
Написать фреймворк значит решить задачу следующего характера:
Как мне построить такую программную структуру,
- которую будет легко расширять и дополнять, но при этом все бы следовало одинаковым простым принципам.
- с которой новому человеку будет легко освоиться.
- чтобы и один человек и команда из десятков или сотен разработчиков, чувствовали себя комфортно пользуясь ей каждый день.
- на основе которой можно с минимальными затратами реализовывать решения для разноплановых задач.
Таким образом основные качества фреймворка:
- консистентность
- простота использования и низкий порог вхождения
- расширяемость
- гибкость
Она (структура) должна быть достаточно абстрактной чтобы быть гибкой но и достаточно конкретной, чтобы быть практически полезной. Написав фреймворк можно легко решать множество однотипных задач.
Вообще хорошая программная архитектура в приложении имеет свойства фреймворка.
У меня преподавательница в университете слово употребляла правильное: "ортогонально".
Представьте себе многомерную ортогональную структуру..
Если строить ПО ортогонально оно станет фреймворком.
Разница между приложением написаным под конкретную задачу и фреймворком, в том что фреймворк позволит путем изменения параметров и данных, получить на основе абстрактных шаблонов новое приложение уже для другой задачи. К основным задачам фреймворка можно отнести максимальное повторное использование кода и отделение данных от их обработки.
Библиотека же по сути не является фреймворком. Библиотека – это реализация. А фреймворк — это шаблон, набор интерфейсов, тонкая прослойка, организующих подход к разработке (который может в свою очередь использовать библиотеки)
Но принципиальная идея фреймворка содержится (на мой взгляд) даже в элементарной функции: Не нужно знать как она работает, передал параметры такие – получил результат такой, передал другие парамаетры, и результат поменялся.
Фреимворк пишут тогда, когда нужно клепать по схеме много чего-то. Потратил три дня на фреймворк, с потом пользуешься. И любые изменения требований решаются небольшими изменениями вводных данных.