ความแตกต่างระหว่างเฟรมเวิร์กกับไลบรารีคืออะไร? [ปิด]


865

ความแตกต่างระหว่างเฟรมเวิร์กกับไลบรารีคืออะไร?

ฉันคิดว่าห้องสมุดเป็นชุดของวัตถุและฟังก์ชั่นที่มุ่งเน้นการแก้ปัญหาเฉพาะหรือพื้นที่เฉพาะของการพัฒนาแอปพลิเคชัน (เช่นการเข้าถึงฐานข้อมูล); และกรอบในอีกทางหนึ่งเป็นชุดของห้องสมุดที่มีศูนย์กลางอยู่ที่วิธีการเฉพาะ (เช่น MVC) ซึ่งครอบคลุมทุกด้านของการพัฒนาแอปพลิเคชัน


18
@ vba4all: สิ่งนี้จะซ้ำกันได้อย่างไรเมื่อถูกถามก่อน?
Noob Saibot

5
เพียงเพราะมันถูกสร้างขึ้นครั้งแรกไม่ได้หมายความว่ามันเป็นไปไม่ซ้ำกัน;) มันเป็นเพียงเกี่ยวกับการระบุซ้ำ / คำถามที่คล้ายกันอย่างมากและสร้างความมั่นใจทรัพยากร / คำตอบที่ใช้ร่วมกัน (และใช้งาน / คำถามตอบที่ดีที่สุดส่วนใหญ่เปิด)
GrayedFox

2
ซ้ำซ้อนของFramework vs. Toolkit vs. Library
emlai

3
@tuple_cat จริงลิงค์ของคุณน่าจะเป็นที่ซ้ำกัน: มันก็ถามว่าหลังจากนี้
chharvey

1
เราต้องการฟังก์ชั่นบางอย่างเราเรียกว่า Library เราต้องการฟังก์ชั่นบางอย่างที่เราจะช่วยในเรื่องของ Framework และ Framework เรียกรหัสของเรา (เช่น UIKit)
Kamleshwar

คำตอบ:


350

จริงๆแล้วคำเหล่านี้อาจหมายถึงสิ่งต่าง ๆ มากมายขึ้นอยู่กับบริบทที่ใช้

ตัวอย่างเช่นบนเฟรมเวิร์ก Mac OS X เป็นเพียงไลบรารีบรรจุลงในบันเดิล ภายในบันเดิลคุณจะพบไลบรารี่แบบไดนามิกที่แท้จริง (libWhething.dylib) ความแตกต่างระหว่างไลบรารีเปล่าและเฟรมเวิร์กบน Mac คือเฟรมเวิร์กสามารถมีไลบรารีหลายเวอร์ชันที่แตกต่างกัน มันสามารถมีทรัพยากรเพิ่มเติม (รูปภาพ, สตริงแปล, ไฟล์ข้อมูล XML, วัตถุ UI, ฯลฯ ) และหากกรอบงานถูกเผยแพร่สู่สาธารณะมันมักจะมีไฟล์. h ที่จำเป็นที่คุณต้องใช้ในห้องสมุด

ดังนั้นคุณมีทุกสิ่งภายในแพ็คเกจเดียวที่คุณต้องใช้ไลบรารีในแอปพลิเคชันของคุณ (ไลบรารี่ C / C ++ / Objective-C ที่ไม่มีไฟล์. h ค่อนข้างไร้ประโยชน์เว้นแต่คุณจะเขียนด้วยตนเองตามเอกสารของไลบรารี) แทนที่จะเป็น มัดไฟล์ที่จะย้ายไปรอบ ๆ (ชุดบันเดิลของ Mac เป็นเพียงไดเรกทอรีในระดับ Unix แต่ UI ปฏิบัติกับมันเหมือนไฟล์เดียวค่อนข้างเหมือนกับว่าคุณมีไฟล์ JAR ใน Java และเมื่อคุณคลิกคุณมักจะไม่เห็น สิ่งที่อยู่ภายในเว้นแต่คุณจะเลือกที่จะแสดงเนื้อหาอย่างชัดเจน)

Wikipedia เรียกเฟรมเวิร์กว่า "buzzword" มันกำหนดกรอบซอฟต์แวร์เป็น

เฟรมเวิร์กซอฟต์แวร์เป็นการออกแบบที่สามารถใช้งานซ้ำได้สำหรับระบบซอฟต์แวร์ (หรือระบบย่อย) กรอบการทำงานของซอฟต์แวร์อาจรวมถึงโปรแกรมสนับสนุนไลบรารีรหัสภาษาสคริปต์หรือซอฟต์แวร์อื่น ๆ เพื่อช่วยพัฒนาและรวมส่วนประกอบต่างๆของโครงการซอฟต์แวร์ไว้ด้วยกัน ส่วนต่าง ๆ ของกรอบอาจเปิดเผยผ่าน API

ดังนั้นฉันจะบอกว่าห้องสมุดเป็นเพียงแค่ "ห้องสมุด" มันเป็นชุดของวัตถุ / ฟังก์ชั่น / วิธีการ (ขึ้นอยู่กับภาษาของคุณ) และแอปพลิเคชันของคุณ "ลิงค์" กับมันและทำให้สามารถใช้วัตถุ / ฟังก์ชั่น / วิธีการ โดยพื้นฐานแล้วเป็นไฟล์ที่มีรหัสที่สามารถใช้ซ้ำได้ซึ่งมักจะสามารถใช้ร่วมกันในหลาย ๆ แอปพลิเคชัน (คุณไม่จำเป็นต้องเขียนรหัสเดียวกันซ้ำแล้วซ้ำอีก)

กรอบงานสามารถเป็นทุกสิ่งที่คุณใช้ในการพัฒนาแอปพลิเคชัน มันอาจเป็นห้องสมุดชุดของห้องสมุดหลายชุดชุดของสคริปต์หรือซอฟต์แวร์ใด ๆ ที่คุณต้องการสร้างแอปพลิเคชันของคุณ Framework เป็นเพียงคำที่คลุมเครือมาก

นี่คือบทความเกี่ยวกับผู้ชายบางคนเกี่ยวกับหัวข้อ " Library vs. Framework " โดยส่วนตัวฉันคิดว่าบทความนี้มีความสามารถในการพิสูจน์ได้สูง มันไม่ผิดที่เขาพูดอยู่ที่นั่น แต่เขาเพิ่งเลือกหนึ่งในหลาย ๆ คำจำกัดความของกรอบงานและเปรียบเทียบกับนิยามคลาสสิกของห้องสมุด เช่นเขาบอกว่าคุณต้องมีกรอบการทำงานสำหรับการจัดกลุ่มย่อย จริงๆ? ฉันสามารถกำหนดวัตถุในห้องสมุดฉันสามารถเชื่อมโยงกับมันและชั้นย่อยในรหัสของฉัน ฉันไม่เห็นว่าฉันต้องการ "กรอบ" สำหรับสิ่งนั้น ในบางครั้งเขาค่อนข้างอธิบายว่าคำว่ากรอบการใช้งานในปัจจุบันได้อย่างไร มันเป็นเพียงคำ hyped ตามที่ฉันพูดก่อน บาง บริษัท ปล่อยแค่ไลบรารี่ปกติ (ในแง่ของคลาสสิกไลบรารี่) และเรียกมันว่า "กรอบ" เพราะมันฟังดูแฟนซีมากกว่า


2
สิ่งที่น่าสนใจในปี 2008 บทความของ Wikipedia ได้อธิบายว่า "framework" เป็น "buzzword"
Zebrafish

2
IMO กรอบงานคือสภาพแวดล้อมของโครงการ "ว่างเปล่า"
Kulvar

514

ห้องสมุดดำเนินการเฉพาะการดำเนินงานที่ดีที่กำหนด

กรอบเป็นโครงกระดูกที่โปรแกรมกำหนด "เนื้อ" ของการดำเนินการโดยการกรอกโครงกระดูกที่ โครงกระดูกยังคงมีรหัสเพื่อเชื่อมโยงส่วนต่าง ๆ แต่งานที่สำคัญที่สุดจะกระทำโดยแอปพลิเคชัน

ตัวอย่างของไลบรารี:โปรโตคอลเครือข่ายการบีบอัดการจัดการรูปภาพยูทิลิตี้สตริงการประเมินนิพจน์ทั่วไปคณิตศาสตร์ การดำเนินงานมีอยู่ในตัวเอง

ตัวอย่างของกรอบ:ระบบเว็บแอพพลิเคชั่น, ตัวจัดการปลั๊กอิน, ระบบ GUI เฟรมเวิร์กกำหนดแนวคิด แต่แอ็พพลิเคชันกำหนดฟังก์ชันการทำงานขั้นพื้นฐานที่ผู้ใช้ปลายทางใส่ใจ


10
+1 สำหรับตัวอย่างจริง แต่คุณคิดหรือไม่ว่าระบบเว็บแอปพลิเคชันหมายถึงอะไร
Pacerier

3
@Pacerier อาจเป็นบางสิ่งที่ช่วยให้คุณสร้างเว็บแอปพลิเคชันแบบเต็มเช่น Rails for Ruby หรือ Sails for Node.js
gustavohenke

คำตอบที่ดี คุณสามารถให้ตัวอย่างเพิ่มเติมที่เกี่ยวข้องกับเฟรมเวิร์กและไลบรารี iOS ได้หรือไม่?
NSPratik

หรือ Django กรอบงานเว็บสำหรับผู้ชอบความสมบูรณ์แบบพร้อมกำหนดส่ง
airstrike

2
ฉันคิดว่าการเติมโครงกระดูกด้วย 'กล้ามเนื้อ' มากกว่า 'เนื้อ' ฉันคิดว่ามันคล้ายคลึงกันมากขึ้นเพราะ 'กล้ามเนื้อ' กำลังตั้งโครงกระดูกให้เคลื่อนไหว
altgov3

290

ฉันคิดว่าความแตกต่างที่สำคัญคือกรอบการทำงานเป็นไปตาม " หลักการของฮอลลีวูด " คือ "อย่าโทรหาเราเราจะโทรหาคุณ"

อ้างอิงจากมาร์ตินฟาวเลอร์ :

ห้องสมุดเป็นหลักชุดของฟังก์ชั่นที่คุณสามารถเรียกวันนี้มักจะจัดในชั้นเรียน การโทรแต่ละครั้งจะทำงานและส่งคืนการควบคุมให้กับลูกค้า

กรอบ embodies ออกแบบบางนามธรรมที่มีพฤติกรรมอื่น ๆ ที่สร้างขึ้นใน. เพื่อที่จะใช้มันคุณต้องใส่พฤติกรรมของคุณเข้าไปในสถานที่ต่าง ๆ ในกรอบทั้งโดย subclassing หรือโดยการเสียบในชั้นเรียนของคุณเอง รหัสของเฟรมเวิร์กจะเรียกรหัสของคุณที่จุดเหล่านี้


2
@Panos ขอบคุณสำหรับคำอธิบาย แต่คุณช่วยอธิบายได้ไหม ตัวอย่างเช่นฉันใช้เฟรมเวิร์ก FacebookSDK และฉันกำลังเรียกวิธีการเรียนจากเฟรมเวิร์กนี้ กรอบการทำงานของ FacebookSDK ไม่ได้เรียกสิ่งใดในรหัสของฉันซึ่งตรงกันข้ามกับคำนิยามของคุณเช่น "อย่าโทรหาเราเราจะโทรหาคุณ"
Charles Robertson

4
@CharlesRobertson AFAIK FacebookSDK เป็นห้องสมุดลูกค้า ไม่สามารถจัดประเภทเป็นกรอบและเหตุผลชัดเจน (ตามที่คุณสังเกตเห็นแล้ว): FacebookSDK ไม่ได้เรียกอะไรในรหัสลูกค้า ยิ่งไปกว่านั้น Facebook นิยาม SDK ดังต่อไปนี้: "ชุดการทำงานด้านฝั่งไคลเอ็นต์ที่หลากหลายสำหรับการเพิ่มโซเชียลปลั๊กอิน, การเข้าสู่ระบบ Facebook และกราฟ API ไม่มีข้อบ่งชี้สำหรับกรอบ ...
Panos

1
@ Panos ขอบคุณ ฉันเดาว่าไอคอนกระเป๋าเดินทางที่แสดงถึง FacebookSDK นั้นเป็นสิ่งที่ทำให้เข้าใจผิดเล็กน้อย และชื่อ 'FacebookSDK.framework' Facebook ควรเปลี่ยนชื่อเป็น 'FacebookSDK.dylib' หรือไม่ แต่ขอขอบคุณสำหรับการชี้แจงนี้ มันเป็นการดีที่จะรู้ว่าคำจำกัดความที่ถูกต้องคืออะไร ...
Charles Robertson

นั่นเป็นคำนิยามที่น่าสนใจ ฉันเพิ่งเริ่มใช้ d3.js และสังเกตว่าโดยทั่วไปถือว่าเป็นกรอบงาน แต่สิ่งที่รหัส d3 ที่ฉันเขียนนั้นอยู่ในรหัสจาวาสคริปต์ปกติดังนั้นฉันจึงไม่สามารถขยายคำจำกัดความนี้เป็น d3 ได้
Dileep Kumar Patchigolla

1
@Dileep สถานะโฮมเพจของ d3.jsในประโยคแรก: "D3.js เป็นไลบรารี JavaScript สำหรับจัดการเอกสารตามข้อมูล" ฉันคิดว่ามันผิดที่จะถือว่าเป็นกรอบ
Panos

243

คุณเรียกห้องสมุด

Framework โทรหาคุณ


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


12
คุณช่วยปรับปรุงสิ่งนี้ให้เป็นไฮกุได้ไหม?
Derek Tomes

18
@DerekTomes BTW: ฉันเพิ่มแบบฟอร์มไฮกุ
Ian Boyd

56
คำตอบของคุณจะถูกกล่าวถึงในMETA คุณสนใจแปลไฮกุไหม ฉันคิดว่าพวกเราหลายคนกำลังสงสัยว่าจริง ๆ แล้วมันหมายถึงการช่วยเหลือห้องสมุดนั่งร้านเจ็บหรือน้ำตาไหลมากมายเพราะนักแปลของ Google ค่อนข้างชอบมันมาก :)
Bugs

27
ดีที่เห็นว่ามีการยกเลิกการลบความคิดเห็นสองรายการแรก ตอนนี้มันสมเหตุสมผลแล้วที่ข้อความภาษาญี่ปุ่นถูกเพิ่มเข้ามา (มันถูกขอให้เป็นเรื่องตลก) และมันเป็นเพียงความพยายามในการแปลไม่ใช่บทกวีญี่ปุ่นที่เป็นที่นิยมอย่างแท้จริง
Zanon

9
ในโซเวียตรัสเซียกรอบเรียกคุณ
Robert Moore

242

ห้องสมุด:

มันเป็นเพียงชุดของการปฏิบัติ (การเขียนโปรแกรมการทำงาน) หรือคำจำกัดความของชั้นเรียน (การเขียนโปรแกรมเชิงวัตถุ) เหตุผลเบื้องหลังคือการใช้รหัสซ้ำเช่นรับรหัสที่เขียนโดยนักพัฒนาซอฟต์แวร์รายอื่นแล้ว ชั้นเรียนหรือการปฏิบัติตามปกติกำหนดการดำเนินงานเฉพาะในบริเวณโดเมน ตัวอย่างเช่นมีบางห้องสมุดของคณิตศาสตร์ที่สามารถให้นักพัฒนาเพียงแค่เรียกใช้ฟังก์ชันโดยไม่ต้องทำซ้ำการดำเนินการตามขั้นตอนวิธีการทำงาน

กรอบ:

ในกรอบการไหลของการควบคุมทั้งหมดมีอยู่แล้วและมีจุดสีขาวที่กำหนดไว้ล่วงหน้าจำนวนมากว่าเราควรจะกรอกข้อมูลด้วยรหัสของเรา เฟรมเวิร์กปกติซับซ้อนกว่า มันกำหนดโครงกระดูกที่แอปพลิเคชันกำหนดคุณสมบัติของตัวเองเพื่อกรอกโครงกระดูก ด้วยวิธีนี้รหัสของคุณจะถูกเรียกโดยกรอบเมื่อเหมาะสม ประโยชน์คือผู้พัฒนาไม่จำเป็นต้องกังวลว่าการออกแบบจะดีหรือไม่ แต่เพียงแค่การใช้ฟังก์ชั่นเฉพาะโดเมน

Library, Framework และการแสดงภาพ Code ของคุณ:

Library, Framework และ Code image ของคุณสัมพันธ์กัน

KeyDifference:

ความแตกต่างที่สำคัญระหว่างห้องสมุดและกรอบการเป็น“ผกผันควบคุม” เมื่อคุณเรียกเมธอดจากไลบรารีคุณจะเป็นผู้ควบคุม แต่ด้วยกรอบการควบคุมจะกลับ: กรอบเรียกคุณแหล่ง

ความสัมพันธ์:

ทั้งคู่กำหนด API ซึ่งใช้สำหรับโปรแกรมเมอร์ที่จะใช้ เมื่อต้องการรวมสิ่งเหล่านี้เข้าด้วยกันเราสามารถคิดว่าไลบรารีเป็นฟังก์ชั่นบางอย่างของแอปพลิเคชันกรอบงานเป็นโครงกระดูกของแอปพลิเคชันและ API คือตัวเชื่อมต่อเพื่อเชื่อมโยงสิ่งเหล่านั้นเข้าด้วยกัน กระบวนการพัฒนาทั่วไปเริ่มต้นด้วยกรอบและกรอกฟังก์ชันที่กำหนดในไลบรารีผ่าน API


14
การผกผันของการควบคุม คำอธิบายในเชิงลึกที่ยอดเยี่ยม!
Patricia

3
ผลรวมดังกล่าวเป็นสิ่งที่ดีและแสดงว่าทำไมบางคนถึงสับสนเพราะกรอบมักรวมห้องสมุดด้วย
Didier A.

1
@didibus หากคุณคิดว่าคำตอบให้คำอธิบายที่ดีคุณสามารถถอนคำตอบได้เพื่อให้ผู้ดูโพสต์สามารถค้นหาคำตอบที่เป็นประโยชน์ได้อย่างง่ายดาย
Durai Amuthan.H

ดังนั้น FFmpeg (ไม่ใช่โปรแกรม แต่ส่วนใหญ่ LibAVUtil จากโครงการ) เป็นเฟรมเวิร์กและ libavcodec ฯลฯ เป็นไลบรารีหรือไม่
MarcusJ

1
@MarcusJ - ทั้ง LibAVUtil และ libavcodec เป็นห้องสมุด
Durai Amuthan.H

110

ตามที่ฉันอธิบายไว้เสมอ:

Library เป็นเครื่องมือ

กรอบการทำงานเป็นวิถีชีวิต

ห้องสมุดที่คุณสามารถใช้ส่วนเล็ก ๆ ช่วยคุณได้ กรอบงานคุณต้องยอมรับโครงการทั้งหมดของคุณ


9
คำตอบนี้ทำให้รู้สึกมากขึ้นหลังจากที่เข้าใจทั้งสองคำอย่างสมบูรณ์
อีก

45

จากมุมมองของนักพัฒนาเว็บ:

  1. ห้องสมุดอื่นสามารถเปลี่ยนได้อย่างง่ายดายโดยห้องสมุดอื่น แต่กรอบไม่สามารถ

    หากคุณไม่ชอบไลบรารี่ของตัวเลือกวันที่ jQuery คุณสามารถแทนที่ด้วยตัวใช้เลือกวันที่อื่น ๆ เช่นตัวเลือกเลือกวันที่ bootstrap หรือ pickadate

    หากคุณไม่ชอบ AngularJS ที่คุณสร้างผลิตภัณฑ์คุณไม่สามารถแทนที่ด้วยกรอบงานอื่น ๆ ได้ คุณต้องเขียนรหัสทั้งหมดของคุณใหม่

  2. ห้องสมุดส่วนใหญ่ใช้เวลาเรียนรู้น้อยกว่าเมื่อเปรียบเทียบกับ Framework เช่น: underscore.js เป็นไลบรารี Ember.js เป็นเฟรมเวิร์ก


คำตอบที่ดีที่สุด ง่ายตรงและชัดเจน
เฟลิเป้ซันติอาโก

41

ฉันชอบคำตอบ Cohens แต่คำจำกัดความทางเทคนิคเพิ่มเติมคือ: รหัสของคุณเรียกห้องสมุด กรอบเรียกรหัสของคุณ ตัวอย่างเช่นกรอบงาน GUI เรียกรหัสของคุณผ่านตัวจัดการเหตุการณ์ เว็บเฟรมเวิร์กเรียกรหัสของคุณผ่านแบบจำลองการตอบสนองคำขอบางอย่าง

สิ่งนี้เรียกว่าการกลับกันของการควบคุมทันใดนั้นเฟรมเวิร์กจะตัดสินว่าเมื่อใดและอย่างไรที่จะรันโค้ดคุณแทนที่จะเป็นอีกวิธีหนึ่งที่เหมือนกับไลบรารี ซึ่งหมายความว่าเฟรมเวิร์กมีผลกระทบมากขึ้นกับวิธีที่คุณต้องจัดโครงสร้างโค้ดของคุณ


30

ฉันลืมที่ฉันเห็นคำนิยามนี้ แต่ฉันคิดว่ามันสวยดี

ไลบรารีคือโมดูลที่คุณโทรจากโค้ดของคุณและเฟรมเวิร์กคือโมดูลที่เรียกใช้โค้ดของคุณ


6
แต่ libc รวมถึง qsort () ซึ่งเรียกรหัสของคุณ ฉันไม่คิดว่าจะทำให้ libc เป็นกรอบ
Mark Baker

โมดูลหมายถึงอะไร?
NattyC

18

เฟรมเวิร์กสามารถสร้างจากไลบรารีที่แตกต่างกัน ลองยกตัวอย่าง

สมมติว่าคุณต้องการปรุงแกงเผ็ดปลา แล้วคุณจะต้องส่วนผสมเช่นน้ำมัน , เครื่องเทศและอื่น ๆสาธารณูปโภค คุณต้องมีปลาซึ่งเป็นฐานในการเตรียมอาหารด้วย (นี่คือข้อมูลการสมัครของคุณ) ส่วนผสมทั้งหมดเข้าด้วยกันเรียกว่ากรอบ ตอนนี้คุณจะใช้พวกเขาหนึ่งโดยหนึ่งหรือรวมกันจะทำให้แกงปลาของคุณซึ่งเป็นของผลิตภัณฑ์ขั้นสุดท้าย เปรียบเทียบกับกรอบเว็บที่ทำจากunderscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJSฯลฯ Twitter Bootstrap v.35สำหรับตัวอย่าง

ตอนนี้ถ้าคุณพิจารณาเพียงหนึ่งส่วนผสมเช่นพูดน้ำมัน คุณไม่สามารถใช้น้ำมันใด ๆ ที่คุณต้องการเพราะมันจะทำลายปลาของคุณ (ข้อมูล) คุณสามารถใช้น้ำมันมะกอกได้เท่านั้น ที่เปรียบเทียบกับunderscore.js ตอนนี้น้ำมันยี่ห้อใดที่คุณต้องการใช้ขึ้นอยู่กับคุณ บางจานทำด้วยAmerican Olive Oil (underscore.js) หรือIndian Olive Oil (lodash.js) สิ่งนี้จะเปลี่ยนรสชาติของใบสมัครของคุณเท่านั้น เนื่องจากวัตถุประสงค์เดียวกันเกือบจะเหมือนกันการใช้งานจึงขึ้นอยู่กับความชอบของนักพัฒนาและสามารถเปลี่ยนได้ง่าย

ป้อนคำอธิบายรูปภาพที่นี่


เฟรมเวิร์ก : คอลเล็กชันของไลบรารีที่จัดเตรียมคุณสมบัติและพฤติกรรมที่ไม่ซ้ำกันให้กับแอ็พพลิเคชันของคุณ (ส่วนผสมทั้งหมด)

Library : ชุดคำสั่งที่กำหนดไว้อย่างดีซึ่งมีคุณสมบัติและพฤติกรรมที่ไม่ซ้ำกับข้อมูลของคุณ (น้ำมันปลา)

ปลั๊กอิน : ตัวสร้างอรรถประโยชน์สำหรับไลบรารี (ui-router -> AngularJS) หรือหลายไลบรารีรวมกัน (date-picker -> bootstrap.css + jQuery) โดยที่ปลั๊กอินของคุณอาจทำงานได้ตามที่คาดไว้


PS AngularJS เป็นกรอบ MVC แต่เป็นห้องสมุด JavaScript เพราะฉันเชื่อว่า Library ขยายพฤติกรรมเริ่มต้นของเทคโนโลยีดั้งเดิม (JavaScript ในกรณีนี้)


คำอธิบายที่ดี :)
Mano

14

นี่คือวิธีที่ฉันคิด (และเห็นคนอื่นหาเหตุผลเข้าข้างตนเอง):

ห้องสมุดคือสิ่งที่อยู่ในรหัสของคุณ และเฟรมเวิร์กเป็นคอนเทนเนอร์สำหรับแอปพลิเคชันของคุณ



8

ห้องสมุดใช้ฟังก์ชันการทำงานเพื่อวัตถุประสงค์ที่ จำกัด ขอบเขตในขณะที่กรอบงานมีแนวโน้มที่จะเป็นกลุ่มของห้องสมุดที่ให้การสนับสนุนสำหรับคุณสมบัติที่หลากหลาย ตัวอย่างเช่นไลบรารี System.Drawing.dll จัดการฟังก์ชันการวาดภาพ แต่เป็นเพียงส่วนหนึ่งของกรอบงาน. NET โดยรวม


3
จุดดีว่ากรอบสามารถมีห้องสมุด ดังนั้นมันสามารถเป็นได้ทั้งเฟรมเวิร์กในแรกและไลบรารีในอินสแตนซ์ที่สอง เนื่องจากเป็นกรณีสำหรับเฟรมเวิร์กเว็บจำนวนมากเช่นApache Wicketที่กำหนดรอบการประมวลผล แต่ยังมีชุดคลาสขนาดใหญ่ที่ใช้ส่วนประกอบ UI ของคอนกรีต
OneWorld

ฉันเชื่อว่า. NET เป็นห้องสมุดที่มีขนาดใหญ่มาก ห้องสมุดใหญ่เกินไปที่จะเรียกว่าห้องสมุด แต่ยังคงเป็นห้องสมุด กรอบการบังคับใช้การออกแบบบางอย่างตัดสินใจควบคุมการไหล ฯลฯ ด้วยห้องเล็ก ๆ เพื่อคนจรจัด .NET เช่นนั้นไม่ได้ทำเช่นนั้น ฉันเชื่อว่า. NET เป็นห้องสมุดในขณะที่ ASP.NET MVC เป็นกรอบงาน แต่ MS ต้องการคำพูดที่ดีในตลาด
nawfal

6

Library - ชุดของคลาสหรือส่วนประกอบใด ๆ ที่สามารถใช้ตามที่ลูกค้าเห็นว่าเหมาะสมเพื่อให้งานสำเร็จ
Framework - กำหนดแนวทางบางอย่างเพื่อให้คุณ "ปลั๊กอิน" เป็นสิ่งที่ใหญ่กว่าคุณ คุณเพียงแค่จัดหาชิ้นส่วนที่เฉพาะเจาะจงกับแอปพลิเคชัน / ข้อกำหนดของคุณในลักษณะที่ต้องการเผยแพร่เพื่อให้ 'กรอบรูปสามารถทำให้ชีวิตของคุณง่ายขึ้น'


6

ไลบรารีใช้งานง่ายและมีประสิทธิภาพคุณสามารถพูดได้ว่าห้องสมุด Zend ช่วยให้เราทำงานที่แตกต่างด้วยคลาสและฟังก์ชั่นที่กำหนดไว้อย่างดีในขณะที่เฟรมเวิร์กเป็นสิ่งที่มักจะบังคับใช้วิธีการบางอย่างเช่น MVC -View คอนโทรลเลอร์) (อ้างอิง) มันเป็นระบบที่กำหนดไว้อย่างดีสำหรับการกระจายงานเช่นใน MVC.Model มีฐานข้อมูลด้านมุมมองสำหรับอินเตอร์เฟส UI และตัวควบคุมใช้สำหรับตรรกะทางธุรกิจ


5

การตีความของคุณฟังดูดีสำหรับฉัน ... ห้องสมุดอาจเป็นอะไรก็ได้ที่รวบรวมและอยู่ในตัวเองเพื่อนำกลับมาใช้ใหม่ในรหัสอื่นไม่มีข้อ จำกัด เกี่ยวกับเนื้อหาของมัน

กรอบบนมืออื่น ๆ ที่คาดว่าจะมีสิ่งอำนวยความสะดวกสำหรับการใช้งานในที่เกิดเหตุบางอย่างของการพัฒนาโปรแกรมเช่นเดียวกับตัวอย่างของคุณ MVC


5

ฉันคิดว่าคุณตรึงความแตกต่างได้ค่อนข้างดี: กรอบแสดงกรอบที่เราทำงานของเรา ... อย่างใดมันเป็น "ข้อ จำกัด " มากกว่าห้องสมุดที่เรียบง่าย
เฟรมเวิร์กควรเพิ่มความสอดคล้องให้กับชุดของไลบรารีด้วย


5

ฉันคิดว่าไลบรารี่เป็นชุดของยูทิลิตี้เพื่อให้บรรลุเป้าหมาย (ตัวอย่างเช่นซ็อกเก็ตการเข้ารหัส ฯลฯ ) Framework คือไลบรารี + RUNTIME EINVIRONNEMENT ตัวอย่างเช่น ASP.NET เป็นเฟรมเวิร์ก: ยอมรับการร้องขอ HTTP, สร้างหน้าวัตถุ, เรียกใช้ lyfe cicle events, ฯลฯ Framework ทำทุกสิ่งนี้คุณเขียนรหัสเล็กน้อยซึ่งจะทำงานในเวลาที่กำหนดของวงจรชีวิตของ คำขอปัจจุบัน!

อย่างไรก็ตามคำถามที่รบกวนมาก!


5

ฉันไม่จำแหล่งที่มาของคำตอบนี้ (ฉันคิดว่าฉันพบใน. ppt ในอินเทอร์เน็ต) แต่คำตอบนั้นค่อนข้างง่าย

Library and a Framework เป็นชุดของคลาสโมดูลและ / หรือรหัส (ขึ้นอยู่กับภาษาการเขียนโปรแกรม) ที่สามารถใช้ในแอปพลิเคชันของคุณและช่วยคุณแก้ปัญหา "ปัญหา" โดยเฉพาะ

ปัญหานั้นอาจเป็นข้อมูลบันทึกหรือตรวจแก้จุดบกพร่องในแอปพลิเคชั่นวาดแผนภูมิสร้างรูปแบบไฟล์เฉพาะ (html, pdf, xls) เชื่อมต่อกับฐานข้อมูลสร้างส่วนหนึ่งของแอปพลิเคชันหรือแอปพลิเคชันที่สมบูรณ์การออกแบบรูปแบบ

คุณสามารถมี Framework หรือ Library เพื่อแก้ปัญหาเหล่านี้และอื่น ๆ อีกมากมายกรอบมาตรฐานช่วยให้คุณสามารถแก้ปัญหาที่ซับซ้อนหรือใหญ่กว่าได้ แต่นั่นคือความแตกต่างที่สำคัญไม่ใช่ความหมายหลักสำหรับทั้งสอง

ข้อแตกต่างที่สำคัญระหว่าง Library และ Framework คือการพึ่งพาระหว่างรหัสของตัวเองในคำอื่น ๆ เพื่อใช้ Framework คุณจำเป็นต้องใช้เกือบทุกคลาสโมดูลหรือรหัสใน FW แต่การใช้ Library คุณสามารถใช้หนึ่งหรือ คลาส, โมดูลหรือโค้ดไม่กี่คลาสใน lib ในแอปพลิเคชันของคุณเอง

ซึ่งหมายความว่าหาก Framework มีตัวอย่างเช่นมี 50 คลาสเพื่อใช้ Framework ในแอพที่คุณต้องการใช้ให้กล่าวว่า 10-15 คลาสขึ้นไปในรหัสของคุณเพราะนั่นคือวิธีการออกแบบ Framework คลาส (วัตถุของคลาสนั้น) เป็นอินพุต / พารามิเตอร์สำหรับเมธอดในคลาสอื่นในกรอบงาน ดู. NET Framework, Spring หรือกรอบ MVC ใด ๆ

แต่ตัวอย่างเช่นไลบรารีการบันทึกคุณสามารถใช้คลาสการบันทึกในรหัสของคุณและช่วยคุณแก้ปัญหา "การบันทึกปัญหา" ซึ่งไม่ได้หมายความว่าไลบรารีการบันทึกไม่มีคลาสเพิ่มเติมในรหัสของเขาเช่นคลาส เพื่อจัดการไฟล์จัดการกับเอาต์พุตหน้าจอหรือแม้แต่ฐานข้อมูล แต่คุณไม่เคยสัมผัส / ใช้คลาสนั้นในรหัสของคุณและนั่นคือเหตุผลว่าทำไมไลบรารีจึงไม่ใช่เฟรมเวิร์ก

และยังมีหมวดหมู่มากกว่า Frameworks และ Libraries แต่นั่นเป็นหัวข้อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.