Чим відрізняється рамка від бібліотеки? [зачинено]


865

Чим відрізняється рамка від бібліотеки ?

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


18
@ vba4all: Як це може бути дублікат, коли його запитали спочатку?
Noob Saibot

5
Тільки тому, що він був створений першим, це не означає, що це не дублікат;) мова йде лише про ідентифікацію дублікатів / дуже схожих питань, а також про те, щоб розділити ресурси / відповіді (і найактивніше / найкраще відповісти на питання)
GrayedFox

2
Можливий дублікат Framework vs. Toolkit vs. Library
emlai

3
@tuple_cat насправді ваше посилання здається дублікатом: його запитали після цього
chharvey

1
Нам потрібна певна функціональність, ми називаємо Бібліотеку. Нам потрібна певна функціональність, і ми скористаємося рамковим і Framework-викликом нашого коду (наприклад, UIKit)
Камлешвар

Відповіді:


350

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

Наприклад, на Mac OS X рамки - це просто бібліотеки, упаковані в комплект. У комплекті ви знайдете фактичну динамічну бібліотеку (libWwhat.dylib). Різниця між голою бібліотекою та основою на Mac полягає в тому, що рамка може містити кілька різних версій бібліотеки. Він може містити додаткові ресурси (зображення, локалізовані рядки, файли даних XML, об’єкти інтерфейсу тощо), і якщо рамка не випущена для загального користування, вона зазвичай містить необхідні .h файли, необхідні для використання бібліотеки.

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

Вікіпедія називає рамки "казковим словом". Він визначає програмне забезпечення як

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

Тож я б сказав, що бібліотека - це саме те, що "бібліотека". Це сукупність об'єктів / функцій / методів (залежно від вашої мови) і ваша програма "пов'язує" проти неї і, таким чином, може використовувати об'єкти / функції / методи. Це в основному файл, що містить код, який можна повторно використовувати, і який зазвичай можна ділитися між декількома додатками (вам не потрібно писати один і той же код знову і знову).

Рамкою може бути все, що ви використовуєте в розробці додатків. Це може бути бібліотека, колекція багатьох бібліотек, колекція сценаріїв або будь-який фрагмент програмного забезпечення, необхідний для створення вашої програми. Рамка - це дуже неясний термін.

Ось стаття про якогось хлопця щодо теми " Бібліотека проти рамки ". Я особисто вважаю, що ця стаття є дуже суперечливою. Неправильно, що він там говорить, однак він просто вибирає одне з декількох визначень фреймворку і порівнює це з класичним визначенням бібліотеки. Наприклад, він каже, що вам потрібна основа для підкласифікації. Дійсно? У мене може бути визначений об'єкт у бібліотеці, я можу зв’язатись із ним та підклас його у своєму коді. Я не бачу, як мені потрібні «рамки» для цього. Деяким чином він швидше пояснює, як сьогодні використовується термін фреймворк. Це просто перекручене слово, як я вже говорив раніше. Деякі компанії випускають просто звичайну бібліотеку (у будь-якому сенсі класичної бібліотеки) і називають її "рамкою", тому що це звучить більш фантазії.


2
Цікаво, що ще у 2008 році у статті Вікіпедії «рамки» було описано як «казкове слово».
Зебрафіш

2
IMO, основою є "порожнє" оточення проекту.
Кульвар

514

Бібліотека виконує конкретні, чітко визначені операції.

Структура являє собою каркас , де додаток визначає «м'ясо» операції, заповнивши скелет. У скелета все ще є код для з'єднання деталей, але найважливіша робота виконується додатком.

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

Приклади рамок: система веб-додатків, плагін-менеджер, система GUI. Рамка визначає концепцію, але додаток визначає основну функціональність, про яку піклуються кінцеві користувачі.


10
+1 для реальних прикладів. Btw, чи не проти уточнити, що ви маєте на увазі під системою веб-додатків?
Pacerier

3
@Pacerier, ймовірно, щось, що дозволяє створити повноцінний веб-додаток, наприклад, Rails for Ruby або Sails for Node.js.
gustavohenke

Гарна відповідь. Чи можете ви навести ще кілька прикладів, пов’язаних із рамками та бібліотеками iOS?
NSPratik

або Джанго, веб-рамки для перфекціоністів із строками.
авіаудар

2
Я б подумав заповнити кістяк "м'язами", а не "м'ясом". Я думаю, що це більш точна аналогія, тому що "м'язи" приводять скелет в рух.
altgov3en

290

Я думаю, що головна відмінність полягає в тому, що рамки дотримуються " голлівудського принципу ", тобто "не дзвоніть нам, ми зателефонуємо вам".

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

Бібліотека є в основному набором функцій , які ви можете зателефонувати, в ці дні , як правило , організовані в класи. Кожен дзвінок виконує певну роботу і повертає контроль клієнту.

Структура втілює в собі деякі абстрактні конструкції, з великою кількістю поведінки , побудованим в. Для того , щоб використовувати його потрібно вставити свою поведінку в різні місця в рамках якої за подклассам або шляху підключення власних класів. Код фреймворку потім називає ваш код у цих точках.


2
@Panos Дякую за пояснення, але чи можете ви детально розглянути. Наприклад, я використовую рамку FacebookSDK, і я викликаю методи класу з цього фрейму. Рамка FacebookSDK не називає нічого в моєму коді, що протилежно вашому визначенню, тобто "не дзвоніть нам, ми зателефонуємо вам".
Чарльз Робертсон

4
@CharlesRobertson AFAIK FacebookSDK - це бібліотека клієнтів. Його не можна класифікувати як фреймворк, а причина очевидна (як ви вже помітили): FacebookSDK нічого не викликає у коді клієнта. Крім того, Facebook визначає SDK таким чином: "Багатий набір функціональних можливостей на стороні клієнта для додавання соціальних плагінів, Facebook Login та Graph API викликів". Немає вказівки на рамки ...
Панос

1
@Panos Дякую Я думаю, що значок валізи, який представляє FacebookSDK, трохи вводить в оману. І назва "FacebookSDK.framework". Facebook повинен перейменувати його на щось на зразок "FacebookSDK.dylib"? Але дякую за роз’яснення цього. Добре знати, що таке правильне визначення ...
Чарльз Робертсон

Це цікаве визначення. Нещодавно я почав використовувати d3.js і зауважив, що він, як правило, вважається рамкою. Але який би код d3 я не писав, він знаходиться в межах звичайного коду javascript, тому я не можу розширити це визначення до d3.
Dileep Kumar Patchigolla

1
@Dileep Домашня сторінка d3.js в першому реченні зазначає: "D3.js - це бібліотека JavaScript для управління документами на основі даних". Я вважаю, що неправильно вважати рамкою.
Панос

243

Ви телефонуєте у бібліотеку.

Рамка вас закликає.


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


12
Не могли б ви відновити це як хайку?
Дерек Томес

18
@DerekTomes BTW: я додав форму хайку .
Ян Бойд

56
Ваша відповідь обговорюється в META . Чи хотіли б ви перекласти хайку? Я думаю, що багато хто з нас цікавить, чи це насправді означає допомогу бібліотеці, болить ліси, багато сліз, як перекладач Google це дуже любить:
Помилки

27
Приємно бачити, що мод не визначив перших двох коментарів. Тепер має сенс, чому японський текст був доданий (його просили як жарт) і що це була лише спроба перекладу, а не справжня популярна японська поема.
Занон

9
У Радянській Росії рамки закликають вас.
Роберт Мур

242

Бібліотека:

Це просто колекція з підпрограм (функціональне програмування) або визначення класів (об'єктно - орієнтоване програмування). Причиною є просто повторне використання коду , тобто отримання коду, який вже написали інші розробники. Класи або процедури зазвичай визначають конкретні операції в певній області домену . Наприклад, є деякі бібліотеки математики, які дозволяють розробнику просто викликати функцію, не повторюючи реалізацію того, як працює алгоритм.

Рамка:

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

Представлення бібліотеки, рамок та коду:

Бібліотека, Рамка та співвідношення зображень коду

Ключова різниця:

Ключова відмінність між бібліотекою та рамкою - "Інверсія управління" . Коли ви викликаєте метод з бібліотеки, ви керуєте. Але за допомогою рамки управління перевернуто: рамка викликає вас . Джерело

Відношення:

Вони обидва визначали API, який використовується для програмістів. Щоб узагальнити їх, ми можемо розглядати бібліотеку як певну функцію програми, рамку як скелет програми та API - з'єднувач для їх об'єднання. Типовий процес розробки зазвичай починається з фреймворку і заповнює функції, визначені в бібліотеках через API.


14
Інверсія управління Велике поглиблене пояснення!
Патрісія

3
Як і малюнок, підсумовує це нікельовано, а також показує, чому люди колись плутаються, оскільки рамки часто також вбудовують бібліотеки.
Дідьє А.

1
@didibus Якщо ви вважаєте, що відповідь дає хороші пояснення, ви можете підтримати відповідь, щоб глядачі публікацій могли легко знайти плідну відповідь.
Дурай Амутан.H

Тож FFmpeg (не програма, а головним чином LibAVUtil від проекту) - це фреймворк, а libavcodec тощо - це бібліотеки?
MarcusJ

1
@MarcusJ - І LibAVUtil, і libavcodec - бібліотеки
Durai Amuthan.H

110

Як я завжди це описував:

Бібліотека - це інструмент.

Рамка - це спосіб життя.

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


9
Ця відповідь має набагато більше сенсу після розуміння повністю обох термінів.
ще

45

З точки зору веб-розробника:

  1. Бібліотеку можна легко замінити іншою бібліотекою. Але рамки не можуть.

    Якщо вам не подобається бібліотека вибору дат jquery, ви можете замінити її на інший інструмент вибору дати, наприклад, інструмент вибору дати завантаження або пікадат.

    Якщо вам не подобається AngularJS, на якому ви побудували свій продукт, ви не можете просто замінити будь-які інші рамки. Вам доведеться переписати всю свою кодову базу.

  2. Здебільшого бібліотека займає дуже менше кривої навчання порівняно з Frameworks. Наприклад: underscore.js - це бібліотека, Ember.js - це рамка.


Найкраща відповідь. Простий, прямий і зрозумілий.
Феліпе Сантьяго

41

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

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


30

Я забуваю, де я бачив це визначення, але думаю, що це досить приємно.

Бібліотека - це модуль, до якого ви телефонуєте зі свого коду, а фреймворк - це модуль, який викликає ваш код.


6
Але libc включає qsort (), який викликає ваш код. Я не думаю, що це робить libc рамкою.
Марк Бейкер

Що означає модуль?
NattyC

18

Рамку можна зробити з різних бібліотек. Візьмемо приклад.

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

Тепер, якщо ви розглядаєте лише один інгредієнт, як скажімо, масло . Ви не можете використовувати жодне масло, яке вам потрібно, тому що це зіпсує вашу рибу (дані). Можна використовувати тільки оливкову олію . Порівняйте це з underscore.js . Тепер, яку марку олії ви хочете використовувати, залежить від вас. Деяке блюдо було зроблене з американської оливкової олії (underscore.js) або індійської оливкової олії (lodash.js). Це лише змінить смак вашої заявки. Оскільки вони служать майже одній цілі, їх використання залежить від уподобань розробника, і вони легко замінюються.

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


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

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

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


PS AngularJS - це структура MVC, але бібліотека JavaScript. Тому що я вважаю, що Бібліотека розширює поведінку натурних технологій за замовчуванням (JavaScript у цьому випадку).


Приємне пояснення :)
Мано

14

Ось як я думаю про це (і раціоналізували інші):

Бібліотека - це те, що міститься у вашому коді. А рамки є контейнером для вашої програми.



8

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


3
Хороший момент, що рамки можуть містити бібліотеки . Отже, це може бути і те, і інше, і рамка в першій, і бібліотека в другій інстанції. Оскільки це стосується багатьох веб-рамок, таких як Apache Wicket , які визначають цикл обробки, але також забезпечують великий набір класів, які реалізують конкретні компоненти інтерфейсу.
OneWorld

Я вважаю, що .NET - це дуже велика бібліотека. Бібліотека занадто велика, щоб називатися бібліотекою, але все ж таки бібліотекою. Рамки застосовують певну конструкцію, вирішують контрольний потік і т. Д. З невеликою кількістю місця для розведення. .NET як такий не робить цього. Я вважаю, що .NET - це бібліотека, тоді як ASP.NET MVC є основою. Але МС потрібні гарні слова, щоб продати на ринок.
nawfal

6

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


6

Бібліотеки призначені для зручності користування та ефективності. Наприклад, можна сказати, що бібліотека Zend допомагає нам виконувати різні завдання за допомогою чітко визначених класів і функцій. Якщо рамки - це щось, що зазвичай змушує певний спосіб реалізації рішення, наприклад, MVC (Model -перегляд-контролер) (довідник) . Це чітко визначена система розподілу завдань, як у MVC.Model, містить сторону бази даних, перегляди призначені для інтерфейсу інтерфейсу, а контролери - для бізнес-логіки.


5

Ваша інтерпретація звучить для мене досить добре ... Бібліотекою може бути все, що складено і є самодостатньою для повторного використання в іншому коді, буквально немає обмежень щодо її вмісту.

Рамки з іншого боку , як очікується, має цілий ряд можливостей для використання в будь - то конкретної арені розробки додатків, так само , як ваш приклад, MVC.


5

Думаю, ви досить добре встановили різницю: фреймворк забезпечує рамку, в якій ми робимо свою роботу ... Якось це скоріше "обмежує", ніж проста бібліотека.
Рамка також повинна додати послідовності набору бібліотек.


5

Я думаю, що бібліотека - це набір утиліт для досягнення мети (наприклад, сокети, криптографія тощо). Рамка - це бібліотека + РІНТИМНЕ РОЗВИТКУ. Наприклад, ASP.NET - це фреймворк: він приймає HTTP-запити, створює об’єкт сторінки, викликає події lyfe cicle тощо. Framework робить усе це, ви пишете трохи коду, який буде запускатися в певний час життєвого циклу поточний запит!

У всякому разі, дуже цікаве питання!


5

Я не пам’ятаю джерела цієї відповіді (я вважаю, що знайшов її в .ppt в Інтернеті), але відповідь досить проста.

Бібліотека та рамка - це набір класів, модулів та / або коду (залежно від мови програмування), який може використовуватися у ваших програмах та допомагає вирішити особливу "проблему".

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

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

Основна відмінність між Бібліотекою та Рамкою - це залежність між власним кодом. Одними словами для використання Framework потрібно використовувати майже всі класи, модулі чи код у FW, але для використання Бібліотеки ви можете використовувати один або кілька класів, модулів або коду в lib у вашій власній програмі

Це означає, що якщо у Framework, наприклад, є 50 класів, щоб використовувати фреймворк у додатку, який потрібно використовувати, скажімо, 10-15 або більше класів у вашому коді, оскільки саме так розроблено Framework, деякі класи (об'єкти цих класів) - це входи / параметри для методів інших класів у рамках. Дивіться .NET Framework, Spring або будь-яку рамку MVC.

Але, наприклад, бібліотека журналів, ви можете просто використовувати клас Log у своєму коді і допомагає вирішити "проблему журналу", це не означає, що бібліотека журналів не має в своєму коді більше класів, як класи обробляти файли, обробляти вихідні екрани або навіть бази даних, але ви ніколи не торкаєтесь / не використовуєте ці класи у своєму коді, і це причина, чому бібліотека, а не фреймворк.

А також є більше категорій, ніж рамки та бібліотеки, але це поза темою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.