В чем разница между фреймворком и библиотекой? [закрытый]

в чем разница между рамки и библиотека?

Я всегда думал о библиотеке как о наборе объектов и функций, которые сосредоточены на решении конкретной проблемы или вокруг определенной области разработки приложений (т. е. доступа к базе данных); структура, с другой стороны, представляет собой набор библиотек, сосредоточенных вокруг конкретной методологии (т. е. MVC) и охватывает все области применения развитие.

20 ответов


на самом деле эти термины могут означать много разных вещей в зависимости от контекста их использования.

например, в Mac OS X фреймворки - это просто библиотеки, упакованные в пакет. Внутри пакета вы найдете фактическую динамическую библиотеку (libWhatever.dylib нужна). Разница между голой библиотекой и платформой на Mac заключается в том, что платформа может содержать несколько различных версий библиотеки. Он может содержать дополнительные ресурсы (изображения, локализованные строки, XML-файлы данных, пользовательский интерфейс предметы и т. д.) и если фреймворк не выпущен для публики, он обычно содержит необходимое .H файлы, которые необходимо использовать в библиотеке.

таким образом, у вас есть все в одном пакете, вам нужно использовать библиотеку в вашем приложении (библиотека C/C++/Objective-C без .H файлы довольно бесполезны, если вы не пишете их самостоятельно в соответствии с некоторой документацией библиотеки), а не кучу файлов для перемещения (пакет Mac - это просто каталог на уровне Unix, но пользовательский интерфейс рассматривает его как один файл, почти как у вас есть файлы JAR в Java, и когда вы нажимаете на него, вы обычно не видите, что внутри, если вы явно не выберете, чтобы показать содержимое).

Википедия называет фреймворк "модным словом". Он определяет программный фреймворк как

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

Так что я бы сказал, что библиотека-это "библиотека". Это набор объектов / функций / методов (в зависимости от вашего языка) и ваше приложение "связывается" с ним и, таким образом, может использовать объекты/функции/методы. Это в основном файл, содержащий повторно используемый код, который обычно может быть разделен между несколькими приложения (вам не нужно писать один и тот же код снова и снова).

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

вот статья о каком-то парне по теме "библиотеки и рамки". Лично я считаю эту статью весьма спорной. Это не неправильно, что он говорит там, однако, он просто выбирает одно из нескольких определений фреймворка и сравнивает это с классическим определением библиотеки. Е. Г. он говорит, что вы нужны рамки для суб-причислять. Неужели? Я могу иметь объект, определенный в библиотеке, я могу связать с ним и подкласс его в моем коде. Я не вижу, как мне нужна "структура" для этого. В некотором роде он скорее объясняет, как термин "рамки" используется в настоящее время. Это просто преувеличенное слово,как я уже говорил. Некоторые компании выпускают только обычную библиотеку (в любом смысле классическую библиотеку) и называют ее "каркасом", потому что это звучит более причудливо.


A библиотека выполняет определенные, четко определенные операции.

A framework скелет, где приложение определяет "мясо" операции путем заполнения скелета. Скелет по-прежнему имеет код для соединения частей, но самая важная работа выполняется приложением.

примеры библиотек: сетевые протоколы, сжатие, обработка изображений, строковые утилиты, оценка регулярных выражений, математика. Операции являются автономными.

примеры структур: система веб-приложений, Plug-in manager, система GUI. Платформа определяет концепцию, но приложение определяет фундаментальную функциональность, о которой заботятся конечные пользователи.


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

по данным Мартин Фаулер:

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

A рамки воплощает некоторые абстрактный дизайн со встроенным поведением. Чтобы использовать его, вам нужно вставить ваше поведение в различных местах в рамки либо путем подклассов, либо подключив свои собственные классы. Этот затем код framework вызывает ваш код в этот момент.


вы вызываете библиотеку.

система призывает вас.


図書館 助け
足場が痛い
多くの涙


библиотека:

Это просто коллекция of подпрограммы (функциональное программирование) или определения классов(объектно-ориентированное программирование). Причина просто повторное использование кода, т. е. получить код, который уже был написан другими разработчиками. Классы или подпрограммы обычно определяют конкретные операции в конкретной области домена. Например, есть некоторые библиотеки математики, которые могут позволить разработчик просто вызывает функцию без повтора реализации того, как работает алгоритм.

основа:

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

библиотека, рамки и представление изображения кода:

Library,Framework and your Code image relation

KeyDifference:

ключевое различие между библиотекой и фреймворком -"инверсия управления". При вызове метода из библиотеки, вы контролируете ситуацию. Но с помощью фреймворка элемент управления инвертируется:фреймворк вызывает вас. источник.

отношения:

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


Как я всегда это описывал:

библиотека-это инструмент.

рамки-это образ жизни.

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


Я люблю Коэнов ответ, но более техническое определение: код вызывает библиотеку. фреймворк вызывает ваш код. Например, GUI framework вызывает ваш код через обработчики событий. Веб-платформа вызывает ваш код через некоторую модель запроса-ответа.

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


с точки зрения веб-разработчика:

  1. библиотека может быть легко заменена другой библиотекой. Но фреймворк не может.

    Если вам не нравится библиотека выбора даты jquery, вы можете заменить другой выбор даты, такой как выбор даты начальной загрузки или pickadate.

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

  2. в основном библиотека занимает очень меньше кривой обучения по сравнению с рамками. Например: подчеркивание.js-это библиотека, Эмбер.js-это фреймворк.


Я забыл, где я видел это определение, но я думаю, что это довольно приятно.

библиотека-это модуль, который вы вызываете из своего кода, а фреймворк-это модуль, который вызывает ваш код.


вот как я думаю об этом (и видел рационализированные другими):

библиотека-это то, что содержится в вашем коде. А фреймворк-это контейнер для вашего приложения.


здесь связан a горькая статья Джоэла Спольски, но содержит хорошее различие между наборами инструментов, библиотеками, фреймворками и такими


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

предположим, вы хотите приготовить карри из рыбы. Тогда вам нужны ингредиенты, такие как масла, специи и другие утилиты. Вам также нужно рыбное который является вашей базой для подготовки вашего блюда (это данные вашего приложения). все ингредиенты вместе называются рамки. Теперь вы будете использовать их один за другим или в комбинация, чтобы сделать вашу рыбу Карри, который ваш конечный продукт. Сравните это с веб-платформу которая состоит из подчеркивания.js, ушко.в CSS, ушко.js, fontawesome, AngularJS etc. Например, Twitter Bootstrap V. 35.

теперь, если вы считаете только один ингредиент, как сказать масла. Вы не можете использовать любое масло, которое вы хотите потому что тогда это испортит вашу рыбу (данные). Вы можете использовать только Оливковое Масло. Сравните это с подчеркивания.js. Сейчас какую марку масла вы хотите использовать, зависит от вас. Какое-то блюдо было сделано с Американское Оливковое Масло (подчеркивание.js) или Индийское Оливковое Масло (лодашь.в JS). Это только изменит вкус вашего приложения. Поскольку они служат почти одной цели, их использование зависит от предпочтений разработчика, и их легко заменить.

enter image description here


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

библиотека : хорошо определенный набор инструкций, которые обеспечивают уникальные свойства и поведение ваших данных. (Масло на рыбе)

плагин : служебная сборка для библиотеки (ui-router - > AngularJS) или многих библиотек в комбинации (выбор даты - > bootstrap.css + jQuery), без которого ваш плагин теперь может работать так, как ожидалось.


П. С. AngularJS-это MVC фреймворка, но библиотеку JavaScript. Потому что я считаю, что библиотека расширяет поведение по умолчанию родной технологии (JavaScript в этом случае).


библиотека реализует функциональность для узкой области, в то время как структура, как правило, представляет собой набор библиотек, обеспечивающих поддержку более широкого спектра функций. Например, библиотечная система.Рисунок.dll обрабатывает функции рисования, но является только одной частью общей платформы .NET framework.


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


библиотеки для простоты использования и эффективности.Вы можете сказать, например, что библиотека Zend помогает нам выполнять различные задачи с ее четко определенными классами и функциями.Хотя фреймворк-это то, что обычно заставляет определенный способ реализации решения, например MVC(Model-view-controller)(ссылка). Это четкая система распределения задач, как в MVC.Модель содержит базы данных,виды интерфейса и контроллеров для бизнеса логика.


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

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


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


Я думаю, что библиотека-это набор утилит для достижения цели (например, розетки, криптографии и т. д.). Framework-это библиотека + среда выполнения EINVIRONNEMENT. Например, ASP.NET это фреймворк: он принимает HTTP-запросы, создает объект страницы, вызывает события lyfe cicle и т. д. Framework делает все это, вы пишете немного кода, который будет запущен в определенное время жизненного цикла текущего запроса!

в любом случае, очень interestering вопрос!


Я не помню источник этого ответа (я думаю, я нашел его .ppt в интернете), но ответ довольно простой.

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

эта проблема может быть журналом или отладкой информации в приложении, рисовать диаграммы, создавать определенный формат файла (html, pdf, xls), подключаться к данным база, создайте часть приложения или полное приложение или код, примененный к Шаблон.

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

основное различие между библиотекой и фреймворком заключается в зависимости betwen свой собственный код, в Одер слова, чтобы использовать фреймворк вы нужно использовать почти все классы, модули или код в FW, но использование библиотеки можно использовать один или несколько классов, модулей или кода в lib в вашем собственном приложении

Это означает, что если фреймворк имеет, например, 50 классов, чтобы использовать фреймворк в приложении, которое вам нужно использовать, пусть сказано, 10-15 или более классов в вашем коде, потому что именно так разработана фреймворк, некоторые классы (объекты этих классов)являются входами / параметрами для методов в других классах в рамках. См. .NET framework, Spring или любую структуру MVC.

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

а также есть больше категорий, чем фреймворки и библиотеки, но это не по теме.


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

A framework С другой стороны, ожидается, что будет иметь ряд средств для использования в какой-то конкретной области разработки приложений, как и ваш пример, MVC.