У чым розніца паміж каркасам і бібліятэкай?

У чым розніца паміж структурай і бібліятэкай?

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

Дзякуй за адказы! Вось некаторыя спасылкі, вынятыя з некаторых адказаў ніжэй:

623
29 сент. зададзены anbanm 29 сент. 2008-09-29 16:56 '08 у 16:56 2008-09-29 16:56
ответ 21 адказ

На самай справе гэтыя тэрміны могуць азначаць шмат розных рэчаў у залежнасці ад выкарыстоўванага імі кантэксту.

Напрыклад, у інфраструктурах Mac OS X ёсць толькі бібліятэкі, спакаваныя ў пакет. Ўнутры пакета вы знойдзеце фактычную дынамічную бібліятэку (libWhatever.dylib). Розніца паміж пусты бібліятэкай і каркасам на Mac заключаецца ў тым, што структура можа ўтрымліваць некалькі розных версій бібліятэкі. Ён можа ўтрымліваць дадатковыя рэсурсы (малюнкі, лакалізаваныя радка, файлы дадзеных XML, аб'екты карыстацкага інтэрфейсу і г.д.), І калі фреймворк не апублікаваны публічна, ён звычайна змяшчае неабходныя файлы .h, неабходныя для выкарыстання бібліятэкі.

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

Wikipedia выклікае фреймворк "моднае слова". Ён вызначае праграмную інфраструктуру як

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

Такім чынам, я б сказаў, што бібліятэка - гэта "бібліятэка". Гэта набор аб'ектаў / функцый / метадаў (у залежнасці ад вашага мовы) і вашага прыкладання "спасылкі" супраць яго і, такім чынам, могуць выкарыстоўваць аб'екты / функцыі / метады. Гэта ў асноўным файл, які змяшчае паўторна які выкарыстоўваецца код, які звычайна можна выкарыстоўваць для некалькіх прыкладанняў (вам не трэба пісаць адзін і той жа код зноў і зноў).

Структура можа быць усім, што вы выкарыстоўваеце ў распрацоўцы прыкладанняў. Гэта можа быць бібліятэка, калекцыя з многіх бібліятэк, калекцыя скрыптоў або любое праграмнае забеспячэнне, неабходнае для стварэння вашага прыкладання. Рамкі - усяго толькі вельмі нявызначаны тэрмін.

Вось артыкул пра нейкі хлопцу па тэме " Бібліятэка супраць Framework ". Я асабіста лічу, што гэты артыкул вельмі спрэчная. Не тое, што ён там кажа, але ён проста выбірае адно з мноства азначэнняў фреймворка і параўноўвае яго з класічным вызначэннем бібліятэкі. Напрыклад. ён кажа, што вам патрэбна аснова для подклассификации. На самай справе? У мяне можа быць аб'ект, пэўны ў бібліятэцы, я магу звязаць яго і падклас ў маім кодзе. Я не бачу, як мне трэба "рамкі" для гэтага. У пэўным сэнсе ён хутчэй тлумачыць, як выкарыстоўваецца тэрмін "рамкі" у цяперашні час. Гэта проста разадзьмутая слова, як я ўжо казаў. Некаторыя кампаніі выпускаюць толькі звычайную бібліятэку (у любым сэнсе класічнай бібліятэкі) і называюць яе "каркасам", таму што гэта гучыць больш фантастычна.

249
29 сент. адказ дадзены Mecki 29 сент. 2008-09-29 17:17 '08 у 17:17 2008-09-29 17:17

A бібліятэка выконвае пэўныя, выразна пэўныя аперацыі.

A framework - гэта касцяк, у якім прыкладанне вызначае "мяса" аперацыі, запаўняючы шкілет. У шкілета ўсё яшчэ ёсць код для злучэння частак, але самая важная праца выконваецца дадаткам.

border=0

Прыклады бібліятэк: Сеткавыя пратаколы, сціск, маніпуляцыя малюнкамі, радковыя ўтыліты, ацэнка рэгулярных выразаў, матэматыка. Аперацыі з'яўляюцца аўтаномнымі.

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

376
29 сент. адказ дадзены Jason Cohen 29 сент. 2008-09-29 16:58 '08 у 16:58 2008-09-29 16:58

Я думаю, што асноўнае адрозненне складаецца ў тым, што рамкі ідуць прынцыпе <

Згодна Марцін Фаулер :

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

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

208
29 сент. адказ дадзены Panos 29 сент. 2008-09-29 17:06 '08 у 17:06 2008-09-29 17:06

Вы выклікаеце бібліятэку.

Framework выклікае вас.


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

166
24 окт. адказ дадзены Ian Boyd 24 каст. 2008-10-24 17:29 '08 у 17:29 2008-10-24 17:29

бібліятэка:

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

структура:

У межах усяго патоку кіравання ўжо ёсць, і ёсць куча наканаваных белых плям, якія мы павінны запоўніць нашым кодам. Структура звычайна больш складаная. Ён вызначае шкілет, у якім прыкладанне вызначае свае ўласныя функцыі для запаўнення шкілета. Такім чынам, ваш код будзе выклікацца каркасам, калі ён будзе адпаведным чынам. Перавага заключаецца ў тым, што распрацоўнікам не трэба турбавацца аб тым, ці добра працуе дызайн ці не, а проста пра ўкараненне функцый, спецыфічных для дамена.

Бібліятэка, структура і выява вашага кода:

2019

160
24 марта '13 в 19:23 2013-03-24 19:23 адказ дадзены Durai Amuthan.H 24 сакавіка '13 у 19:23 2013/03/24 19:23

Як я заўсёды апісваў гэта:

Бібліятэка - гэта прылада.

Рамка - гэта лад жыцця.

Бібліятэка, у якой вы можаце выкарыстоўваць любую малюсенькую частка, дапаможа вам. Рамкі, на якія вы павінны выканаць ўвесь праект.

79
29 сент. адказ дадзены James Curran 29 сент. 2008-09-29 17:04 '08 у 17:04 2008-09-29 17:04

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

Гэта таксама называецца інверсіяй кіравання - раптам структура вырашае, калі і як выконваць код, а не наадварот, як з бібліятэкамі. Гэта азначае, што структура таксама значна ўплывае на структуру вашага кода.

32
29 сент. адказ дадзены JacquesB 29 сент. 2008-09-29 17:10 '08 у 17:10 2008-09-29 17:10

З пункту гледжання вэб-распрацоўнікаў:

  • Бібліятэка можа быць лёгка заменена іншы бібліятэкай. Але межы не могуць.

    Калі вам не падабаецца бібліятэка выбару дат jQuery, вы можаце замяніць яе іншым выбарам даты, напрыклад, выбраць дату або дату.

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

  • У асноўным бібліятэка займае значна менш крывой навучання ў параўнанні з Framework. Напрыклад: underscore.js з'яўляецца бібліятэкай, Ember.js з'яўляецца асновай.

23
23 дек. адказ дадзены Fizer Khan 23 снеж. 2014-12-23 10:45 '14 у 10:45 2014/12/23 10:45

Я забыўся, дзе я бачыў гэта вызначэнне, але я думаю, што гэта даволі добра.

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

20
29 сент. адказ дадзены Moe 29 сент. 2008-09-29 17:06 '08 у 17:06 2008-09-29 17:06

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

9
29 сент. адказ дадзены Lorenzo Boccaccia 29 сент. 2008-09-29 17:33 '08 у 17:33 2008-09-29 17:33

бібліятэка

Бібліятэка - гэта шматкроць які выкарыстоўваецца фрагмент кода, які вы выкарыстоўваеце, паколькі ён не ўтрымлівае ніякіх перахопаў для яго пашырэння. У бібліятэцы звычайна будзе сканцэнтравана адна функцыянальнасць, да якой вы звяртаецеся праз API. Вы выклікаеце бібліятэчную функцыю, яна выконвае некаторы код, а затым вяртаецца код кіравання. Прыкладам добрай бібліятэкі Java (ці бібліятэк у гэтым выпадку) з'яўляецца Apache Commons

Framework

Структура - гэта фрагмент кода, які дыктуе архітэктуру, якой будзе прытрымлівацца ваш праект. Пасля таго, як вы вылучыце структуру, з якой вы працуеце, вы павінны прытрымлівацца рамачнаму коду і метадалогіям праектавання. Структура прадаставіць вам перахопы і зваротныя выклікі, так што вы будзеце будаваць на ёй - тады ён выкліча ваш падлучаны код, калі захоча, гэта з'ява называецца Inversion of Control.

Структура, як правіла, уключае мноства бібліятэк, якія палягчаюць вашу працу. Прыкладамі (вэб-) фреймворков з'яўляюцца:

7
29 июня '16 в 2:21 2016-06-29 02:21 адказ дадзены Gherbi Hicham 29 чэрвеня '16 у 2:21 2016/06/29 02:21

Вось як я пра гэта думаю (і бачыў, што іншыя рацыяналізаваны):

Бібліятэка - гэта нешта, якое змяшчаецца ў вашым кодзе. І framework - гэта кантэйнер для вашага прыкладання.

7
29 сент. адказ дадзены Kon 29 сент. 2008-09-29 17:08 '08 у 17:08 2008-09-29 17:08

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

5
29 сент. адказ дадзены Gishu 29 сент. 2008-09-29 17:03 '08 у 17:03 2008-09-29 17:03

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

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

5
25 февр. адказ дадзены Debaprasad 25 февр. 2014-02-25 07:26 '14 у 7:26 2014/02/25 07:26

Структура можа быць складзена з розных бібліятэк. Возьмем прыклад.

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

Цяпер, калі вы разглядаеце толькі адзін інгрэдыент, напрыклад, алей. Вы не можаце выкарыстоўваць якое-небудзь алей, таму што тады яно разбурыць вашу рыбу (дадзеныя). Вы можаце выкарыстоўваць Аліўкавы алей. Параўнайце гэта з underscore.js. Цяпер, які брэнд алею вы хочаце выкарыстоўваць, залежыць ад вас. Некаторы страва было прыгатавана з Амерыканскім аліўкавым алеем (underscore.js) або індыйскім аліўкавым алеем (lodash.js). Гэта толькі зменіць густ вашага прыкладання. Паколькі яны служаць амаль аднолькавай мэты, іх выкарыстанне залежыць ад перавагі распрацоўніка, і яны лёгка замяняюцца.

2019

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

5
29 сент. адказ дадзены Jeff Yates 29 сент. 2008-09-29 17:00 '08 а 17:00 2008-09-29 17:00

Бібліятэкі прызначаныя для зручнасці выкарыстання і эфектыўнасці. Напрыклад, вы можаце сказаць, што бібліятэка Zend дапамагае нам выконваць розныя задачы з выразна пэўнымі класамі і функцыямі. У той час як інфраструктура - гэта тое, што звычайна прыводзіць да вызначанага спосабу рэалізацыі рашэння, напрыклад MVC (Model-view-controller) (спасылка) . Гэта добра пэўная сістэма для размеркавання задач, такіх як MVC.Model ўтрымлівае бок базы дадзеных, прадстаўлення для інтэрфейсу карыстацкага інтэрфейсу, а кантралёры - для бізнес-логікі.

5
12 окт. адказ дадзены Ravi shah 12 каст. 2013-10-12 17:56 '13 у 17:56 2013/10/12 17:56

Я думаю, што вы значна ўмацавалі розніцу: у рамках рамкі ёсць кадр, у якім мы робім сваю працу ... Як-то гэта больш "стрымлівае", чым простая бібліятэка.
Мяркуецца, што структура таксама дадасць ўзгодненасць у набор бібліятэк.

4
29 сент. адказ дадзены PhiLho 29 сент. 2008-09-29 17:00 '08 а 17:00 2008-09-29 17:00

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

У любым выпадку, вельмі цікавае пытанне!

4
29 сент. адказ дадзены stefano m 29 сент. 2008-09-29 17:07 '08 у 17:07 2008-09-29 17:07

Я не памятаю крыніца гэтага адказу (думаю, я знайшоў яго ў .ppt ў Інтэрнэце), але адказ даволі просты.

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

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

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

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

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

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