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

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

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

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

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

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

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

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

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

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

Вот статья о каком-то парнем по теме « Библиотека против рамочной программы ». Я лично считаю, что эта статья весьма спорна. Не то, что он там говорит, однако он просто выбирает одно из нескольких определений фреймворка и сравнивает его с classическим определением библиотеки. Например, он говорит, что вам нужна основа для подclassификации. В самом деле? У меня может быть объект, определенный в библиотеке, я могу связать его и подclass в моем коде. Я не вижу, как мне нужно «frameworks» для этого. В некотором роде он скорее объясняет, как используется термин «frameworks» в настоящее время. Как я уже говорил, это просто раздутое слово. Некоторые компании выпускают только обычную библиотеку (в любом смысле classической библиотеки) и называют ее «каркасом», потому что это звучит более странно.

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

Рамка представляет собой скелет, в котором приложение определяет «мясо» операции, заполняя скелет. У скелета все еще есть код для соединения частей, но самая важная работа выполняется приложением.

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

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

Я думаю, что основное различие заключается в том, что frameworks следуют « принципу Голливуда », т. Е. «Не называй нас, мы позвоним тебе».

По словам Мартина Фаулера :

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

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

Вы звоните в Библиотеку.

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


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

Библиотека:

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

Фреймворк:

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

Представление библиотеки, frameworks и вашего кода:

Библиотека, структура и отношение кода к коду

KeyDifference:

Ключевое различие между библиотекой и каркасом – «Инверсия управления» . Когда вы вызываете метод из библиотеки, вы находитесь под контролем. Но с каркасом элемент управления инвертируется: фреймворк вызывает вас . Источник.

Связь:

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

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

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

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

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

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

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

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

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

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

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

  2. В основном библиотека занимает гораздо меньше кривой обучения по сравнению с Framework. Например: underscore.js является библиотекой, Ember.js является основой.

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

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

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

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

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

Структура может быть составлена ​​из разных библиотек. Давайте возьмем пример.

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

Теперь, если вы рассматриваете только один ингредиент, например, масло . Вы не можете использовать какое-либо масло, потому что тогда оно разрушит вашу рыбу (данные). Вы можете использовать только оливковое масло . Сравните это с underscore.js . Теперь, какой бренд масла вы хотите использовать, зависит от вас. Некоторое блюдо было сделано с американским оливковым маслом (underscore.js) или индийским оливковым маслом (lodash.js). Это только изменит вкус вашего приложения. Поскольку они обслуживают почти ту же цель, их использование зависит от предпочтений разработчика, и они легко заменяемы.

введите описание изображения здесь


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

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

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


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

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

Библиотека. Любой набор classов или компонентов, которые могут использоваться в качестве клиента, считается подходящим для выполнения определенной задачи.
Framework – дает определенные рекомендации для вас, чтобы «подключить» к чему-то большему, чем вы. Вы просто предоставляете детали, специфичные для вашего приложения / требований, в опубликованном виде, так что «каркас может сделать вашу жизнь легкой»,

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

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

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

Я думаю, что вы значительно укрепили разницу: в рамках frameworks есть кадр, в котором мы делаем свою работу … Как-то это более «сдерживает», чем простая библиотека.
Предполагается, что структура также добавит последовательность к набору библиотек.

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

Во всяком случае, очень интересный вопрос!

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

Библиотека и Framework представляют собой набор classов, модhive и / или кода (в зависимости от языка программирования), который может использоваться в ваших приложениях и помогает вам решить конкретную «проблему».

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

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

Основное различие между Библиотекой и Структурой – это зависимость между их собственным кодом, в других словах для использования Framework вам нужно использовать почти все classы, модули или код в FW, но для использования библиотеки вы можете использовать один или несколько classов, модhive или кода в lib в вашем собственном приложении

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

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

А также есть больше категорий, чем Frameworks и Libraries, но это не в тему.

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

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

Interesting Posts

Каков рекомендуемый каталог для хранения содержимого веб-сайта?

Тип возврата ‘?:’ (Тернарный условный оператор)

Как получить HTML-вывод UserControl в .NET (C #)?

Изменить текст по умолчанию в типе ввода = «файл»?

Вложенность в Parallel.ForEach

Может ли class Java добавлять метод вовремя?

Какие блокирующие операции заставляют stream STA накачивать сообщения COM?

Как очистить список переходов для удаленного рабочего стола?

Как отключить aero snap без отключения win + R + win + L на окнах 10

Как найти несколько вхождений с группами регулярных выражений?

Можно использовать кроссоверный кабель для обмена Интернетом между Windows 7 и Ubuntu?

Лучший способ обработки наследования объектов в Spring Data JPA

Отмена длинного регулярного выражения?

Когда следует использовать final для параметров метода и локальных переменных?

Сценарий оболочки для автоматизации входа в систему SSH с использованием пароля

Давайте будем гением компьютера.