В чем разница между фреймворком и библиотекой ?
Я всегда думал о библиотеке как о наборе объектов и функций, которые фокусируются на решении конкретной проблемы или конкретной области разработки приложений (например, доступа к базе данных); и, с другой стороны, структура как набор библиотек, ориентированных на конкретную методологию (например, MVC) и охватывающих все области разработки приложений.
Ответы:
На самом деле эти термины могут означать много разных вещей в зависимости от контекста, который они используют.
Например, в Mac OS X фреймворки - это просто библиотеки, упакованные в пакет. В комплекте вы найдете актуальную динамическую библиотеку (libWhwhat.dylib). Разница между пустой библиотекой и фреймворком на Mac заключается в том, что фреймворк может содержать несколько разных версий библиотеки. Он может содержать дополнительные ресурсы (изображения, локализованные строки, файлы данных XML, объекты пользовательского интерфейса и т. Д.), И если инфраструктура не является общедоступной, она обычно содержит необходимые файлы .h, необходимые для использования библиотеки.
Таким образом, в одном пакете есть все, что вам нужно, чтобы использовать библиотеку в своем приложении (библиотека C / C ++ / Objective-C без файлов .h довольно бесполезна, если вы не пишете их самостоятельно в соответствии с документацией библиотеки), а не куча файлов для перемещения (пакет Mac - это просто каталог на уровне Unix, но пользовательский интерфейс рассматривает его как один файл, почти как у вас есть файлы JAR в Java, и когда вы щелкаете по нему, вы обычно не видите что внутри, если вы явно не выбрали, чтобы показать содержимое).
Википедия называет фреймворк "модным словом". Он определяет структуру программного обеспечения как
Так что я бы сказал, что библиотека - это просто библиотека. Это набор объектов / функций / методов (в зависимости от вашего языка), и ваше приложение «ссылается» на него и, таким образом, может использовать объекты / функции / методы. В основном это файл, содержащий код многократного использования, который обычно может использоваться несколькими приложениями (вам не нужно писать один и тот же код снова и снова).
Фреймворк может быть всем, что вы используете в разработке приложений. Это может быть библиотека, набор из множества библиотек, набор сценариев или любое программное обеспечение, необходимое для создания приложения. Рамки это просто очень расплывчатый термин.
Вот статья о каком-то парне на тему « Библиотека против фреймворка ». Я лично считаю , что эта статья является весьма спорной. Это не неправильно, что он говорит там, однако, он просто выбирает одно из множества определений фреймворка и сравнивает его с классическим определением библиотеки. Например, он говорит, что вам нужна структура для подклассов. В самом деле? Я могу иметь объект, определенный в библиотеке, я могу ссылаться на него и подкласс его в моем коде. Я не понимаю, как мне нужна «основа» для этого. В некотором смысле он скорее объясняет, как термин используется сегодня. Это просто раскрученное слово, как я уже говорил. Некоторые компании выпускают просто обычную библиотеку (в любом смысле классической библиотеки) и называют ее «структурой», потому что это звучит более навороченно.
источник
Библиотека выполняет конкретные, четко определенные операции.
Структура представляет собой каркас , где приложение определяет «мясо» операции, заполнив скелет. У скелета все еще есть код для соединения частей, но самая важная работа выполняется приложением.
Примеры библиотек: сетевые протоколы, сжатие, манипулирование изображениями, строковые утилиты, оценка регулярных выражений, математика. Операции являются автономными.
Примеры фреймворков: система веб-приложений, менеджер плагинов, система графического интерфейса. Фреймворк определяет концепцию, но приложение определяет фундаментальную функциональность, о которой заботятся конечные пользователи.
источник
Я думаю, что главное отличие состоит в том, что фреймворки следуют « голливудскому принципу », то есть «не звоните нам, мы вам позвоним».
По словам Мартина Фаулера :
источник
Вы звоните в библиотеку.
Фреймворк зовет вас.
источник
Библиотека:
Это просто коллекция из подпрограмм (функциональное программирование) или определение классов (объектно - ориентированное программирование). Причиной этого является простое повторное использование кода , то есть получение кода, который уже был написан другими разработчиками. Классы или подпрограммы обычно определяют конкретные операции в конкретной области домена . Например, есть несколько библиотек математики, которые могут позволить разработчику просто вызвать функцию без повторения реализации алгоритма.
Фреймворк:
В фреймворке весь поток управления уже существует, и есть множество предопределенных белых пятен, которые мы должны заполнить нашим кодом . Фреймворк обычно более сложный. Он определяет скелет, где приложение определяет свои собственные функции, чтобы заполнить скелет. Таким образом, ваш код будет вызываться фреймворком, когда это необходимо. Преимущество заключается в том, что разработчикам не нужно беспокоиться о том, хорош дизайн или нет, а нужно только реализовать специфичные для предмета функции.
Библиотека, Framework и представление вашего кода:
KeyDifference:
Ключевым отличием библиотеки от фреймворка является «инверсия контроля» . Когда вы вызываете метод из библиотеки, вы находитесь под контролем. Но с фреймворком управление перевернуто: фреймворк зовет вас . Источник.
Связь:
Оба они определили API, который используется программистами для использования. Чтобы сложить их вместе, мы можем представить библиотеку как определенную функцию приложения, каркас как скелет приложения, а API - это соединитель для их объединения. Типичный процесс разработки обычно начинается с фреймворка и заполняет функции, определенные в библиотеках, через API.
источник
Как я всегда описывал это:
Библиотека - это инструмент.
Фреймворк - это образ жизни.
Библиотека, в которой вы можете использовать любую маленькую часть, которая вам поможет. Фреймворк, которому вы должны посвятить весь свой проект.
источник
С точки зрения веб-разработчика:
Библиотека может быть легко заменена другой библиотекой. Но рамки не могут.
Если вам не нравится библиотека выбора даты jquery, вы можете заменить ее на другую программу выбора даты, такую как загрузчик даты начальной загрузки или указатель.
Если вам не нравится AngularJS, на котором вы создали свой продукт, вы не можете просто заменить его какими-либо другими фреймворками. Вы должны переписать всю свою базу кода.
В основном библиотека требует гораздо меньшего обучения по сравнению с Frameworks. Например: underscore.js - это библиотека, Ember.js - это фреймворк.
источник
Мне нравится ответ Коэнса, но более техническое определение таково: ваш код вызывает библиотеку. Фреймворк вызывает ваш код . Например, графический интерфейс вызывает ваш код через обработчики событий. Веб-фреймворк вызывает ваш код через некоторую модель запрос-ответ.
Это также называется инверсией управления - внезапно среда решает, когда и как выполнять ваш код, а не наоборот, как в случае с библиотеками. Это означает, что фреймворк также оказывает гораздо большее влияние на то, как вы должны структурировать свой код.
источник
Я забыл, где я видел это определение, но я думаю, что это довольно мило.
Библиотека - это модуль, который вы вызываете из своего кода, а фреймворк - это модуль, который вызывает ваш код.
источник
Фреймворк может быть сделан из разных библиотек. Давайте возьмем пример.
Допустим, вы хотите приготовить рыбное карри. Тогда вам понадобятся такие ингредиенты, как масло , специи и другие полезности . Вам также нужна рыба, на которой вы будете готовить блюдо (это данные вашего заявления). все ингредиенты вместе называются рамками . Теперь вы будете использовать их один за другим или в комбинации, чтобы сделать рыбу карри, которая является вашим конечным продуктом . Сравните это с веб-фреймворком, который состоит из underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS и т. Д. Например, Twitter Bootstrap v.35,
Теперь, если вы рассматриваете только один ингредиент, как, скажем, масло . Вы не можете использовать любое масло, которое хотите, потому что тогда оно разрушит вашу рыбу (данные). Вы можете использовать только оливковое масло . Сравните это с underscore.js . Теперь, какую марку масла вы хотите использовать, зависит от вас. Некоторые блюда были приготовлены с использованием американского оливкового масла (underscore.js) или индийского оливкового масла (lodash.js). Это только изменит вкус вашего приложения. Поскольку они служат практически одной цели, их использование зависит от предпочтений разработчика, и их легко заменить.
PS AngularJS - это фреймворк MVC, но библиотека JavaScript. Потому что я считаю, что библиотека расширяет стандартное поведение нативных технологий (в данном случае JavaScript).
источник
Вот как я думаю об этом (и видел, как другие рационализировали):
Библиотека - это то, что содержится в вашем коде. А фреймворк - это контейнер для вашего приложения.
источник
Здесь приведена горькая статья Джоэла Спольски , но она содержит хорошее различие между наборами инструментов, библиотеками, фреймворками и т. д.
источник
Библиотека реализует функциональные возможности для узкопрофильной цели, в то время как инфраструктура, как правило, представляет собой набор библиотек, обеспечивающих поддержку более широкого диапазона функций. Например, библиотека System.Drawing.dll обрабатывает функции рисования, но является только одной частью общей платформы .NET.
источник
Библиотека. Любой набор классов или компонентов, которые могут использоваться клиентом для выполнения определенной задачи.
Framework - требует от вас определенных рекомендаций по «подключению» к чему-то большему, чем вы. Вы просто предоставляете материалы, специфичные для вашего приложения / требований, в соответствии с требованиями публикации, так что «работа с фреймами может облегчить вашу жизнь»
источник
Библиотеки предназначены для простоты использования и эффективности. Например, вы можете сказать, что библиотека Zend помогает нам решать различные задачи с ее четко определенными классами и функциями. В то время как инфраструктура обычно требует определенного способа реализации решения, такого как MVC (Model -view-controller) (ссылка) . Это четко определенная система для распределения задач, как в MVC. Модель содержит сторону базы данных, представления предназначены для интерфейса пользовательского интерфейса, а контроллеры предназначены для бизнес-логики.
источник
Ваша интерпретация звучит довольно хорошо для меня ... Библиотека может быть чем угодно, которая компилируется и самодостаточна для повторного использования в другом коде, в ее содержании буквально нет ограничений.
С другой стороны, ожидается, что фреймворк будет иметь ряд возможностей для использования в какой-то конкретной области разработки приложений, как, например, в вашем примере, MVC.
источник
Я думаю, что вы хорошо заметили разницу: фреймворк обеспечивает фрейм, в котором мы выполняем нашу работу ... Каким-то образом, он более «сдерживающий», чем простая библиотека.
Фреймворк также должен добавить согласованности в набор библиотек.
источник
Я думаю, что библиотека - это набор утилит для достижения цели (например, сокеты, криптография и т. Д.). Фреймворк библиотека + БЕЗОПАСНОЕ ОБЪЕДИНЕНИЕ. Например, ASP.NET - это фреймворк: он принимает HTTP-запросы, создает объект страницы, вызывает события lyfe cicle и т. Д. Фреймворк делает все это, вы пишете немного кода, который будет выполняться в определенное время жизненного цикла. текущий запрос!
Во всяком случае, очень интересный вопрос!
источник
Я не помню источник этого ответа (я думаю, я нашел его в .ppt в Интернете), но ответ довольно прост.
Библиотека и Framework - это набор классов, модулей и / или кода (в зависимости от языка программирования), которые могут использоваться в ваших приложениях и помогают вам решить конкретную «проблему».
Эта проблема может заключаться в регистрации или отладке информации в приложении, рисовании диаграмм, создании определенного формата файла (html, pdf, xls), подключении к базе данных, создании части приложения или полного приложения или кода, примененного к Шаблон дизайна .
У вас может быть Фреймворк или Библиотека для решения всех этих проблем, и многие другие, обычно фреймворки, помогают вам решать более сложные или большие проблемы, но это является следствием их основного различия, а не основного определения для обоих.
Это означает, что если, например, Framework имеет 50 классов, чтобы использовать Framework в приложении, которое вам нужно использовать, скажем, 10-15 или более классов в вашем коде, потому что именно так разработана Framework, некоторые классы (объекты этих классов) являются входными данными / параметрами для методов в других классах в рамках. Смотрите .NET Framework, Spring или любой MVC-фреймворк.
Но, например, библиотека журналов, вы можете просто использовать класс Log в своем коде и помочь вам решить «проблему журналирования», это не означает, что библиотека журнала не имеет больше классов в своем коде, как классы обрабатывать файлы, обрабатывать вывод на экран или даже базы данных, но вы никогда не трогаете / не используете эти классы в своем коде, и именно поэтому библиотека, а не фреймворк.
И также есть больше категорий, чем Frameworks и Библиотеки, но это не по теме.
источник