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




функции это (17)

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

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

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


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

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

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

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

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


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


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

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

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


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

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

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

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

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

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

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

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


Библиотека:

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

Фреймворк:

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

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

KeyDifference:

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

Связь:

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


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

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


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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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


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

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


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

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


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

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

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

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


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


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


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

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


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

Сама рефлексия - это слово для таких языков, которые не обладают способностью к самопознанию и самочувствию как Java и C #. Поскольку у них нет возможности самопознания, когда мы хотим наблюдать, как это выглядит, у нас должно быть другое дело, чтобы подумать о том, как это выглядит. Отличные динамические языки, такие как Ruby и Python, могут воспринимать свое отражение без помощи других людей. Можно сказать, что объект Java не может воспринимать, как это выглядит без зеркала, которое является объектом класса отражения, но объект в Python может воспринимать его без зеркала. Вот почему нам нужно отразить на Java.