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

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

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


person anbanm    schedule 29.09.2008    source источник
comment
@ vba4all: Как это может быть дубликат, когда его сначала спросили?   -  person Noob Saibot    schedule 03.02.2015
comment
Тот факт, что он был создан первым, не означает, что это не дубликат;) речь идет только о выявлении повторяющихся / очень похожих вопросов и обеспечении совместного использования ресурсов / ответов (и открытых вопросов с наиболее активным / лучшим ответом)   -  person GrayedFox    schedule 30.11.2015
comment
Возможный дубликат Framework vs. Toolkit vs. Library   -  person emlai    schedule 02.12.2015
comment
также связаны ux.stackexchange.com/questions/13314/   -  person chharvey    schedule 22.07.2016
comment
@tuple_cat на самом деле ваша ссылка кажется дубликатом: ее спросили после этой   -  person chharvey    schedule 22.07.2016
comment
Нам нужен какой-то функционал, мы называем его Библиотекой. Нам нужны некоторые функции, которые мы воспользуемся фреймворком, и Framework вызывает наш код (например, UIKit).   -  person Kamleshwar    schedule 14.10.2016
comment
Программный фреймворк - это не просто библиотека. Он также включает в себя особую архитектуру дизайна, с которой должны работать пользователи, - способ сортировки, при котором различные элементы библиотеки соединяются вместе, чтобы обеспечить общее решение для конкретного типа приложения. Таким образом, фреймворки имеют то преимущество, что для их использования требуется только настройка пользователем и проверка предварительно написанных тестов. Используя только библиотеки, пользователям необходимо спроектировать архитектуру и создать тесты перед внедрением. Таким образом, требуется больше работы только с библиотеками. Но библиотеки гибкие и потенциально более эффективные.   -  person Trunk    schedule 14.08.2018


Ответы (22)


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

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

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

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

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

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

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

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

person Mecki    schedule 29.09.2008
comment
Интересно, что еще в 2008 году в статье Википедии фреймворк был назван модным словом. - person Zebrafish; 03.01.2018
comment
ИМО, фреймворк - это пустая среда проекта. - person Kulvar; 20.07.2018
comment
Я смотрю на фреймворк как на скелет или фрейм с множеством пустых слотов, и фреймворк определяет, что эти слоты должны содержать. Итак, фреймворк будет использовать все заполненные слоты и создавать программное обеспечение. Я чувствую, что это своего рода архитектура плагинов, когда вы подключаете определенные вещи в определенных местах и ​​забываете о том, как заставить их работать вместе. Об этом позаботится фреймворк. Простыми примерами таких могут быть Processing (Creative Art), Spark (кластерные вычисления общего назначения) и т. Д. - person Nithin B; 14.06.2020
comment
Как этот ответ все еще находится наверху, когда он просто говорит, что вопрос недействителен. Некоторые хотят дать разные определения этим разным словам, так что давайте поговорим об этом. - person Timothee Howland; 23.02.2021
comment
@TimotheeHowland Мой ответ наверху, так как это принятый ответ. Спрашивающий решает, какой ответ является принятым, в конце концов, это его вопрос. И SO - это не дискуссионный сайт. Также вы можете придавать словам любое значение, которое вам нравится, но затем вы изобретаете свой собственный язык. Официально библиотека описывает набор программных программ, и происхождение этого термина хорошо известно, в то время как структура не имеет официального определения, и даже неизвестно, откуда этот термин появился. - person Mecki; 24.02.2021

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

Фреймворк - это каркас, в котором приложение определяет «основу» операции, заполняя каркас. В скелете все еще есть код для соединения частей, но наиболее важную работу выполняет приложение.

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

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

person Jason Cohen    schedule 29.09.2008
comment
+1 за реальные примеры. Кстати, не могли бы вы прояснить, что вы имеете в виду под системой веб-приложений? - person Pacerier; 27.08.2014
comment
@Pacerier, вероятно, то, что позволяет вам создать полноценное веб-приложение, например Rails для Ruby или Sails для Node.js. - person gustavohenke; 15.12.2014
comment
Хороший ответ. Не могли бы вы привести еще несколько примеров, связанных с фреймворками и библиотеками iOS? - person NSPratik; 02.06.2015
comment
или Django, веб-фреймворк для перфекционистов с установленными сроками. - person airstrike; 14.03.2016
comment
Я бы подумал о заполнении скелета «мышцами», а не «мясом». Я думаю, это более точная аналогия, потому что «мышцы» приводят в движение скелет. - person altgov3en; 29.05.2017
comment
@ altgov3en «мясо» требуется для приведения скелета в движение; «мускулы» не перемещают скелет без другого «мяса», например мяса нервной системы, мяса кровеносной системы. - person Geoffrey Hale; 01.08.2018
comment
Итак, класс Java Collection - это фреймворк или библиотека? - person Hadi; 02.08.2019

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

Согласно Мартину Фаулеру:

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

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

person Panos    schedule 29.09.2008
comment
@Panos Спасибо за объяснение, но не могли бы вы уточнить? Например, я использую фреймворк FacebookSDK и вызываю методы класса из этого фреймворка. Фреймворк FacebookSDK ничего не вызывает в моем коде, что противоречит вашему определению, т.е. не звоните нам, мы позвоним вам. - person Charles Robertson; 27.12.2016
comment
@CharlesRobertson AFAIK FacebookSDK - это клиентская библиотека. Его нельзя классифицировать как фреймворк, и причина очевидна (как вы уже заметили): FacebookSDK ничего не вызывает в клиентском коде. Более того, Facebook определяет SDK следующим образом: Богатый набор клиентских функций для добавления социальных плагинов. , Facebook Login и вызовы Graph API. Нет указаний на рамки ... - person Panos; 27.12.2016
comment
@Panos Спасибо. Тогда я думаю, что значок чемодана, представляющий FacebookSDK, немного вводит в заблуждение. И имя «FacebookSDK.framework». Facebook должен переименовать его в нечто вроде «FacebookSDK.dylib»? Но спасибо, что разъяснили это. Хорошо знать, что такое правильное определение ... - person Charles Robertson; 27.12.2016
comment
Это интересное определение. Недавно я начал использовать d3.js и заметил, что он обычно считается фреймворком. Но любой код d3, который я написал, находится в обычном коде javascript, поэтому я не могу расширить это определение до d3. - person Dileep Kumar Patchigolla; 18.01.2019
comment
@Dileep На домашней странице d3.js в первом предложении говорится: D3.js - это библиотека JavaScript для управления документами на основе данные. Я считаю, что считаться фреймворком неправильно. - person Panos; 02.02.2019

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

Framework зовет вас.


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

person Ian Boyd    schedule 24.10.2008
comment
Не могли бы вы преобразовать это в хайку? - person Derek Tomes; 20.03.2014
comment
@DerekTomes Кстати: я добавил форму haiku. - person Ian Boyd; 02.06.2014
comment
Ваш ответ обсуждается в META. Не могли бы вы перевести хайку? Я думаю, многие из нас задаются вопросом, действительно ли это означает Помогать библиотеке, строительные леса больно, много слез, как с любовью выразился переводчик Google :) - person Bugs; 15.03.2017
comment
Может быть, Библиотека помогает, фреймворк болит, много-много слез? - person Lawrence Dol; 16.03.2017
comment
Приятно видеть, что мод восстановил первые два комментария. Теперь понятно, почему был добавлен текст на японском языке (его просили в шутку) и что это была просто попытка перевода, а не настоящее популярное японское стихотворение. - person Zanon; 16.03.2017
comment
@RobertMoore Ты меня опередил, но я собирался написать тебе фреймворк ... и добавить кое-что оскорбительного характера - person Dexygen; 09.01.2019
comment
@RobertMoore на самом деле, в России принцип IoC полностью изменен, и поэтому они называют фреймворк xD. - person ranu; 18.06.2019
comment
@ranu Вы, конечно, имеете в виду советскую Россию? - person aross; 24.11.2020

Библиотека:

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

Фреймворк:

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

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

Библиотека, каркас и отношение изображения кода

KeyDifference:

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

Связь:

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

person Durai Amuthan.H    schedule 24.03.2013
comment
Инверсия управления Отличное подробное объяснение! - person Patricia; 14.08.2014
comment
Как и на картинке, он хорошо резюмирует, а также показывает, почему иногда люди путаются, потому что фреймворки также часто объединяют библиотеки. - person Didier A.; 10.12.2014
comment
@didibus Если вы считаете, что ответ дает хорошее объяснение, вы можете проголосовать за ответ, чтобы зрители сообщения могли легко найти плодотворный ответ. - person Durai Amuthan.H; 10.12.2014
comment
Итак, FFmpeg (не программа, а в основном LibAVUtil из проекта) - это фреймворк, а libavcodec и т. Д. - библиотеки? - person MarcusJ; 11.12.2014
comment
@MarcusJ - LibAVUtil и libavcodec являются библиотеками - person Durai Amuthan.H; 25.02.2015
comment
Ваш код находится на более высоком уровне, чем модули низкого уровня библиотеки. Как Framework обеспечивает IoC инъекцией зависимостей, если платформа вызывает ваш код, который, в свою очередь, вызывает вашу библиотеку? - person KannarKK; 10.05.2016

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

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

Фреймворк - это образ жизни.

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

person James Curran    schedule 29.09.2008
comment
Этот ответ становится гораздо более понятным после полного понимания обоих терминов. - person another; 25.11.2016

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

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

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

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

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

person Fizer Khan    schedule 23.12.2014

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

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

person JacquesB    schedule 29.09.2008

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

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

person Moe    schedule 29.09.2008
comment
Но libc включает qsort (), который вызывает ваш код. Я не думаю, что это делает libc фреймворком. - person Mark Baker; 29.09.2008
comment
Что подразумевается под модулем? - person nCardot; 22.01.2020

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

Допустим, вы хотите приготовить рыбное карри. Затем вам понадобятся такие ингредиенты, как масло, специи и другие полезные вещества. Вам также понадобится рыба, на которой вы будете готовить блюдо (это данные вашего приложения). все ингредиенты вместе называются структурой. Теперь вы собираетесь использовать их по одному или в комбинации, чтобы приготовить рыбное карри, которое станет вашим конечным продуктом. Сравните это с веб-фреймворком, который состоит из 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), без которой ваш плагин теперь может работать должным образом.


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

person Uday Hiwarale    schedule 28.06.2016
comment
Хорошее объяснение :) - person Mano; 31.05.2020

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

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

person Kon    schedule 29.09.2008

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

person Lorenzo Boccaccia    schedule 29.09.2008
comment
исправить неработающую ссылку https://web.archive.org/web/20180924092925/http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12 - person whyer; 09.12.2020
comment
и дайте несколько цитат, почему вы считаете эту статью полезной. он может быть удален еще раз, нехорошо давать ответы с голыми ссылками без кавычек imo - person whyer; 09.12.2020

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

person Jeff Yates    schedule 29.09.2008
comment
Хороший момент, что фреймворк может содержать библиотеки. Таким образом, это может быть и фреймворк в первом экземпляре, и библиотека во втором экземпляре. Так же обстоит дело со многими веб-фреймворками, такими как Apache Wicket, которые определяют цикл обработки, но также предоставляют большой набор классов, реализующих конкретные компоненты пользовательского интерфейса. - person OneWorld; 02.10.2012
comment
Я считаю, что .NET - очень большая библиотека. Библиотека слишком велика, чтобы называться библиотекой, но все же библиотекой. Фреймворки навязывают определенный дизайн, решают поток управления и т. Д., Оставляя мало места для переделки. .NET как таковой не делает этого. Я считаю, что .NET - это библиотека, а ASP.NET MVC - это фреймворк. Но для выхода на рынок MS нужны хорошие слова. - person nawfal; 19.11.2014

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

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

person stefano m    schedule 29.09.2008

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

person Ravi shah    schedule 12.10.2013

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

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

person Adam Bellaire    schedule 29.09.2008

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

person PhiLho    schedule 29.09.2008

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

person Gishu    schedule 29.09.2008

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

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

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

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

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

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

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

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

person Junior Garza    schedule 27.07.2011

Я постараюсь объяснить, как будто вам пять.

Представим, что недавно вы открыли в своем городе ресторан, где подают бургеры. Но вы чувствуете, что новичку так сложно приготовить гамбургер. Вы думали о простом способе приготовить гамбургеры для клиентов. Кто-то сказал вам, что существуют McDonald Burger Framework и BurgerKing Burger Framework.

Если вы используете McDonald Burger Framework, приготовить бургер на Биг Мак очень просто. (но вы не можете сделать Whopper.)

Если вы используете BurgerKing Burger Framework, сделать Whopper Burger очень просто (однако вы не можете сделать Биг Мак)

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

Вы также слышали, что есть что-то под названием Простая библиотека Burger-Patty.

Если вы используете эту библиотеку, вы можете легко приготовить любую котлету для гамбургеров (скорость X2). На самом деле не имеет значения, используете ли вы McDonald Burger Framework или BurgerKing Burger Framework. В любом случае вы все равно можете использовать эту Простую библиотеку Burger-Patty. (Даже вы можете использовать эту библиотеку без фреймворков.)

Видите ли вы разницу между Framework и Library?


После того, как вы начали использовать McDonald Burger Framework. Было бы непросто перейти на BurgerKing Burger Framework. Так как придется менять всю кухню.

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

person Jin Lim    schedule 12.01.2021

Библиотека против фреймворка

Мартин Фаулер - InversionOfControl

Библиотека и Framework - это внешний код по отношению к вашему коду. Это может быть файл (например, .jar), системный код (часть ОС) и т. Д.

Library - это набор полезного кода. Основное внимание уделяется вашему коду. Библиотека решает узкий круг задач. Например - утилиты, сортировка, модуляризация

your code ->(has) Library API

Framework или Inversion of Control(IoC) container [О программе] - это нечто большее. Фреймворк решает широкий спектр задач (зависящих от предметной области), вы делегируете эту задачу фреймворку. IoC - ваш код зависит от логики фреймворка, событий ... В результате фреймворк вызывает ваш код. Это заставляет ваш код придерживаться своих правил (реализовать / расширить протокол / интерфейс / контракт), передать лямбды ... Например - тесты, GUI, структуры DI ...

your code ->(has) and ->(implements) Framework API

[Библиотека iOS против Framework]

[DIP против DI против IoC]

person yoAlex5    schedule 25.03.2021

На основе определений, данных в книге Шаблоны проектирования < / em> Эрих Гамма и др .:

  • библиотека: набор связанных процедур и классов, составляющих многоразовую реализацию;
  • framework: набор взаимодействующих классов с шаблонными методами, составляющими повторно используемую спецификацию. Он устанавливает поток управления и позволяет подключиться к этому потоку для адаптации структуры к конкретной проблеме. путем переопределения в подклассе методов ловушки, вызываемых шаблонными методами в классах фреймворка.

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

person Maggyero    schedule 16.07.2021