Library vs. framework เทียบกับ API? [ปิด]


33

ห้องสมุดกรอบและ API ต่างกันอย่างไร พวกเขาทั้งหมดดูเหมือนฉัน ฉันต้องการได้ยินคนคิดเรื่องนี้





2
@Jorg: คุณควรส่งคำตอบนี้ ตามที่กล่าวมานั้นคือสแปมในแนวเขตและอุดตันหน้าเว็บ

2
@Sergio - Jörg W Mittag มีคำตอบที่ได้รับการพิจารณาอย่างรอบคอบและได้รับ 1171 รายการ (42 คำตอบที่ได้รับการพิจารณาอย่างรอบคอบและได้รับที่นี่) เขาไม่ได้พยายามที่จะเป็นเรื่องยาก เขาพยายามที่จะปรับปรุง P.SE โดยแสดงว่าคำถามนี้ไม่จำเป็นเพียงใด (ไม่ต้องพูดถึงว่ายังไม่มีคำตอบที่กล่าวถึงคุณลักษณะที่แตกต่างของกรอบงาน)
Corbin March

คำตอบ:


35

ไลบรารี่คือชุดของฟังก์ชั่น / วัตถุที่ทำหน้าที่หนึ่งในวัตถุประสงค์เฉพาะ คุณสามารถใช้ห้องสมุดในหลายโครงการ

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

API เป็นอินเทอร์เฟซสำหรับโปรแกรมอื่น ๆ เพื่อโต้ตอบกับโปรแกรมของคุณโดยไม่ต้องเข้าถึงโดยตรง

หากต้องการกล่าวอีกอย่างหนึ่งให้คิดว่าไลบรารีเป็นส่วนเสริม / ชิ้นส่วนของแอปพลิเคชันกรอบงานเป็นโครงกระดูกของแอปพลิเคชันและ API เป็นส่วนที่หันหน้าออกด้านนอกของแอปดังกล่าว


7
นั่นไม่ใช่คำจำกัดความที่ดีของกรอบงาน ฉันจะไม่เรียกเฟรมเวิร์กใดว่า "ชุดรูปแบบและไลบรารี"
TheLQ

เฟรมเวิร์กเป็นเหมือนสภาพแวดล้อมที่สร้างขึ้นนอกเหนือจาก +1
Klaim

ใช่ฉันอยู่ที่การสูญเสียเล็กน้อยสำหรับคำที่หนึ่ง ใครมีคำแนะนำที่ดีกว่า คนฉลาดอื่น ๆ รู้สึกอิสระที่จะแก้ไข ฉันไปหาวิกิพีเดียซึ่งเรียกว่าเฟรมเวิร์ก: "Frameworks เป็นกรณีพิเศษของไลบรารี่ซอฟต์แวร์ที่พวกเขาเป็น abstractions ของโค้ดที่สามารถนำมาใช้ซ้ำได้ซึ่งห่อหุ้มด้วย Application Programming Interface (API) ที่กำหนดไว้อย่างดี" ซึ่งดูเหมือนว่า บริบทของคำถามนี้มากกว่าความช่วยเหลือ
GSto

3
ห้องสมุดคือเมื่อรหัสของคุณมีค่าใช้จ่าย (รหัสของคุณ "ใช้ห้องสมุด") และกรอบคือเมื่อมันมีค่าใช้จ่าย (กรอบ "เรียกใช้รหัสของคุณ") ตัวอย่างเช่นกรอบกำหนดสิ่งที่สิ่งที่จะต้องเกิดขึ้น (Swing, servlets) ในขณะที่มีห้องสมุดที่คุณตัดสินใจเมื่อใดและวิธีการที่จะได้รับการใช้งาน (การแปลงภาพการเข้ารหัส) API เป็นเพียงคำจำกัดความของฟังก์ชันจำนวนมากที่คุณสามารถเรียกใช้และเป็นส่วนหนึ่งของทั้งไลบรารีและกรอบงาน
Martin Wickman

14

คำตอบที่ดีเพื่อให้ห่างไกล แต่พวกเขาพลาดจุดสำคัญอย่างหนึ่ง - กรอบใช้IoC รหัสของคุณล้อมรอบด้วยกรอบ มันอาศัยอยู่ข้างใน ในทางตรงกันข้ามรหัสของคุณใช้ไลบรารีหรือ API มันอาศัยอยู่นอกมัน IoC คือความแตกต่าง


ไม่จำเป็นต้องเป็นเรื่องจริง เฟรมเวิร์กสามารถใช้ IoC และแอปพลิเคชันของคุณสามารถอยู่ในกรอบได้ แต่ไม่จำเป็นต้องทำ โง่รายการวิกิพีเดียกรอบแสดงรายการนี้เป็นคุณลักษณะที่แตกต่างของกรอบการทำงานและการอ้างอิงวิทยานิพนธ์นี้ " dirkriehle.com/computer-science/research/dissertation/... " แต่วิทยานิพนธ์ของตัวเองไม่ได้มีการผกผันวลี ' 'หรือ' ioc 'และระบุว่า "โดยทั่วไปแอปพลิเคชันไม่เพียง แต่ใช้หนึ่งเฟรมเวิร์ก แต่มีหลายเฟรม" (p26, ref p9)
Kirk Broadhurst

11
@ Kirk Broadhurst- คิดมาร์ตินฟาวเลอร์จริง ๆ: "Inversion of Control เป็นส่วนสำคัญของสิ่งที่ทำให้เฟรมเวิร์กแตกต่างจากไลบรารี (... ) เฟรมเวิร์กรวบรวมการออกแบบที่เป็นนามธรรมและมีพฤติกรรมที่สร้างขึ้นมามากขึ้น คุณจำเป็นต้องแทรกพฤติกรรมของคุณลงในสถานที่ต่าง ๆ ในเฟรมเวิร์กไม่ว่าจะเป็นคลาสย่อยหรือโดยการเสียบคลาสของคุณเองโค้ดของเฟรมเวิร์กจะเรียกรหัสของคุณ ... "ถ้าเราสรุปได้ว่า IoC ไม่ใช่คุณสมบัติที่แตกต่างกัน คุณสมบัติที่แตกต่าง - มันเหมือนกันหมดและไม่สนุก
Scant Roger

@ScantRoger, Java Collections Framework ใช้ IoC หรือไม่ ดูเหมือนจะไม่เป็นเช่นนั้น .......
Pacerier

3

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

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

API ควรมีความเสถียรแม้ว่าบางส่วนของ API สามารถเลิกใช้ได้ด้วยเหตุผลหลายประการ ยิ่งใช้ API ในวงกว้างมากเท่าไหร่การเปลี่ยนก็จะยิ่งยากขึ้นเท่านั้น ส่วนใหญ่หากไม่ใช่ Java 1.0 API ทั้งหมดยังคงมีอยู่แม้ว่าจะมีวิธีการมากมายที่เลิกใช้แล้ว

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

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

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

การใช้ไลบรารี API และกรอบงานที่เหมาะสมสามารถทำให้การพัฒนาง่ายขึ้น ส่วนประกอบเหล่านี้ดูแลปัญหาทั่วไปและอนุญาตให้ทีมพัฒนามุ่งเน้นไปที่ปัญหาเฉพาะของแอปพลิเคชัน


2

เฟรมเวิร์กเป็นขั้นตอนหนึ่งจากไลบรารี หากกล่องเครื่องมือของคุณเป็นห้องสมุดการประชุมเชิงปฏิบัติการของคุณจะเป็นกรอบ

Wikipedia พูดว่า

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

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

API สามารถสร้างได้ทั้งสำหรับแอปพลิเคชัน (ผ่าน dll หรือปลั๊กอิน) หรือเว็บไซต์และบริการ (ผ่าน REST และ webservices)


การเปรียบเทียบที่ดี ...
sunwukung

1

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

กรอบการทำงานมีแนวโน้มที่จะค่อนข้างหนาในแง่นี้เกือบจะสามารถสร้างภาษาของตัวเองได้ตลอดเวลา jQuery เป็นตัวอย่างของเฟรมเวิร์กที่มีไวยากรณ์ของตัวเองและมีน้ำหนักเพิ่มขึ้นเล็กน้อยในแง่ของการรับโค้ดของฉันในแง่หนึ่ง เฟรมเวิร์กอาจเป็นแพลตฟอร์มที่ทำให้พวกเขาคล้ายกับ API ในแง่หนึ่งเช่น Win32API หรือ. Net Framework แต่ละวิธีมีหลายวิธีในการสร้างแอปพลิเคชันเพื่อให้สามารถมี Frameworks ที่มี API ในพวกเขาและ APIs

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


1

ไปที่ห้องสมุดและเริ่มอ่านหนังสือ หากคุณเป็นแอพพลิเคชั่นคอลเล็กชันหนังสือคือห้องสมุด ชั้นวางของตู้และสารประกอบที่บ้านทั้งหมดนี้ถือเป็นกรอบ ทุกสิ่งที่คุณสัมผัสขณะปฏิบัติงานการอ่านหนังสือคือ API


นี่คือคำตอบที่ยอดเยี่ยม
หมอผี

0

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

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

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


0

แอปพลิเคชันได้รับการพัฒนาโดยใช้ไลบรารีตามกรอบงานและสื่อสารผ่าน API

หากคุณสร้างแอปพลิเคชั่นจะพูดแอปพลิเคชันการประมวลผลภาพออนไลน์

  • คุณสามารถใช้ไลบรารีการประมวลผลรูปภาพที่เขียนไว้ล่วงหน้า
  • ในกรอบใด ๆ ที่คุณรู้ว่าจะแนะนำคุณในการสร้างแอปพลิเคชัน
  • คุณจะให้แอปพลิเคชันด้วยวิธีการโต้ตอบกับโลกภายนอก ... นั่นคือ API แอปพลิเคชันของคุณสำหรับส่วนที่เหลือของโลก

เมื่อมีสายเข้ามายังแอปพลิเคชันของคุณ

  • มันจะถูกจัดการในวิธีที่คุณออกแบบด้วยคำแนะนำของกรอบ
  • กำลังประมวลผลการเรียกที่ดำเนินการโดยไลบรารี
  • ฟังก์ชั่นเหล่านี้จะสามารถเข้าถึงได้ผ่าน API ของคุณจากโลกภายนอก

ไปยังบุคคลที่โทร

เหตุผลที่มีอยู่:

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