กรอบซอฟต์แวร์คืออะไร [ปิด]


194

ใครช่วยอธิบายหน่อยได้ไหมว่าซอฟต์แวร์เฟรมเวิร์กคืออะไร? ทำไมเราต้องมีกรอบ? กรอบทำอะไรเพื่อให้การเขียนโปรแกรมง่ายขึ้น?

คำตอบ:


422

ฉันสายเกินไปที่จะตอบ แต่ฉันอยากจะแบ่งปันตัวอย่างหนึ่งซึ่งฉันคิดเพียงวันนี้ ถ้าฉันบอกให้คุณตัดกระดาษที่มีขนาด 5 ม. x 5 ม. ถ้าอย่างนั้นคุณก็จะทำเช่นนั้น แต่สมมติว่าฉันขอให้คุณตัดกระดาษ 1,000 แผ่นที่มีขนาดเท่ากัน ในกรณีนี้คุณจะไม่ทำการวัด 1,000 ครั้ง เห็นได้ชัดว่าคุณจะทำกรอบ 5 ม. x 5 ม. แล้วด้วยความช่วยเหลือของมันคุณจะสามารถตัดกระดาษ 1,000 ชิ้นในเวลาน้อยลง ดังนั้นสิ่งที่คุณทำคือทำกรอบซึ่งจะทำหน้าที่เฉพาะประเภท แทนที่จะทำภารกิจประเภทเดียวกันซ้ำแล้วซ้ำอีกสำหรับแอปพลิเคชั่นประเภทเดียวกันคุณสร้างกรอบการทำงานที่มีสิ่งอำนวยความสะดวกเหล่านั้นทั้งหมดเข้าด้วยกันในแพ็คเก็ตอันสวยงามเพียงใบเดียว


27
ฉันต้องการทราบสาเหตุของการลงคะแนนโหวตคำตอบ มันจะช่วยฉันปรับปรุงมัน
Neha Choudhary

4
เด็ดมาก ๆ ที่เข้าใจง่าย ........... ขอบคุณมาก
Premkumar

25
@NehaChoudhary ไม่ใช่ฉัน แต่เขา -1 เพราะสิ่งที่คุณกำลังพูดถึงคือห้องสมุดไม่ใช่กรอบเนื่องจาก IoC ไม่มี
Pacerier

11
ฉันได้อ่านโพสต์ของคุณแล้ว แต่สิ่งที่คุณโพสต์นั้นฟังดูเหมือนห้องสมุดจะทำอะไรได้บ้าง อธิบายเกี่ยวกับความแตกต่างระหว่างเฟรมเวิร์กกับไลบรารีอย่างไร
Aaron Liu

2
ฉันไม่เข้าใจ จากสิ่งที่คุณอธิบายว่าจะเป็นเหมือนห้องสมุดใช่ไหม
เราเตอร์

92

ในทางเทคนิคคุณไม่จำเป็นต้องมีกรอบ หากคุณกำลังสร้างเว็บไซต์ที่เรียบง่ายจริงๆ (คิดถึงเว็บในปี 1992) คุณสามารถทำได้ทั้งหมดด้วย HTML ที่กำหนดโค้ดยากและ CSS

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

คุณสามารถเลือกที่จะเขียนตรรกะทั้งหมดที่คุณต้องการด้วยตัวเองทุกครั้ง คุณสามารถเขียน data-persistence / storage layer ของคุณเองหรือ - ถ้าคุณยุ่งมาก - เพียงแค่เขียน SQL แบบกำหนดเองสำหรับการเข้าถึงฐานข้อมูลทุกครั้ง คุณสามารถเขียนเลเยอร์การรับรองความถูกต้องและการจัดการเซสชัน และตรรกะการสร้างเท็มเพลตของคุณเอง และตรรกะการจัดการข้อยกเว้นของคุณเอง และฟังก์ชั่นความปลอดภัยของคุณเอง และกรอบการทดสอบหน่วยของคุณเองเพื่อให้แน่ใจว่าทุกอย่างทำงานได้ดี และของคุณเอง ... [ดำเนินต่อไปเป็นเวลานาน]

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

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

และราคาของสิ่งนี้? ลงทุนเวลาเรียนรู้กรอบ แต่ - ตามความจริงทุก ๆ เว็บที่ออกจะมีการยืนยัน - มันคุ้มค่ากับเวลาที่ใช้ในการเรียนรู้ที่จะได้รับประโยชน์มากมาย


17
ทำไมไม่ลองใส่พลังงานนั้นลงไปในการมีส่วนร่วมในกรอบโอเพนซอร์ซมากกว่าที่จะซัดสิ่งของของคุณเอง? 'คนเดียวเราสามารถเคลื่อนย้ายหิน เราสามารถเคลื่อนย้ายภูเขาและสิ่งต่าง ๆ ทั้งหมดด้วยกัน
Steve Jalim

7
@Jefffrey "แล้วคุณจะเรียนรู้ได้อย่างไรคุณจะเติบโตเป็นโปรแกรมเมอร์ได้อย่างไร" เรียนรู้อย่างไรก็ตามคุณต้องการ แต่ถ้าคุณตั้งใจจะทำงานให้กับลูกค้าจริงคุณควรให้ทางออกที่ดีที่สุดในเวลาที่สั้นที่สุด รหัส "อาจเป็นบั๊กซี" ของคุณไม่เป็นที่ยอมรับ
Cmorales

6
@Cororales หากคุณต้องการเรียนรู้ภาษาการเขียนโปรแกรมหรือปัญหาเฉพาะโดเมนใด ๆ คุณจะไม่ได้มีลูกค้า "ของจริง" (และคุณอาจมีเวลามากในมือของคุณ) และนั่นคือเหตุผลที่ฉันแนะนำมือใหม่ ไม่ต้องเริ่มจากกรอบ
รองเท้า

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

1
@Cororales ฉันรู้ว่าบางคนที่ใช้เฟรมเวิร์ก แต่ใช้เวลาสองครั้งในแต่ละโครงการ ความเร็วการเขียนโปรแกรมไม่ได้เกี่ยวข้องกับเครื่องมือที่ใช้เสมอไป
Cypher

53

สรุปที่ Wikipedia (Software Framework) (google hit btw แรก) อธิบายได้ค่อนข้างดี:

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

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

  1. ผกผันของการควบคุม - ในกรอบซึ่งแตกต่างจากในไลบรารีหรือแอปพลิเคชันผู้ใช้ปกติโฟลว์การควบคุมโดยรวมของโปรแกรมไม่ได้ถูกกำหนดโดยผู้เรียก แต่ตามกรอบ [1]
  2. พฤติกรรมเริ่มต้น - กรอบมีพฤติกรรมเริ่มต้น พฤติกรรมเริ่มต้นนี้จะต้องเป็นพฤติกรรมที่มีประโยชน์และไม่ใช่ชุดของตัวเลือก
  3. extensibility - เฟรมเวิร์กสามารถขยายได้โดยผู้ใช้โดยปกติแล้วโดยการเลือกเฉพาะหรือรหัสเฉพาะสำหรับผู้ใช้ที่มีฟังก์ชั่นเฉพาะ
  4. รหัสเฟรมเวิร์กที่ไม่สามารถแก้ไขได้ - โค้ดเฟรมเวิร์กโดยทั่วไปไม่ได้รับอนุญาตให้แก้ไข ผู้ใช้สามารถขยายกรอบงานได้ แต่ไม่สามารถแก้ไขรหัสได้

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


13
ส่วนสีขาวคำตอบของคุณเป็นวิธีที่ดีกว่าส่วนสีเทา, สีตามประเภทของคำถาม ...
OlimilOops

ฉันค่อนข้างมั่นใจว่าคนที่ถามคำถามพบรายการใน Wikipedia ด้วย ... เขา / เธออาจมองหาคำตอบที่ครอบคลุมมากขึ้น
Stophface

31

มีคำตอบที่ดีอยู่แล้ว แต่ให้ฉันดูว่าฉันสามารถให้มุมมองอื่นกับคุณได้หรือไม่

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

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

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

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


14

ฉันไม่แน่ใจว่ามีคำจำกัดความที่ชัดเจนของ "กรอบงาน" บางครั้งชุดห้องสมุดขนาดใหญ่เรียกว่ากรอบการทำงาน แต่ฉันคิดว่าการใช้คำทั่วไปนั้นใกล้เคียงกับคำจำกัดความของ aioobe

นี้บทความที่ดีมากผลรวมถึงความแตกต่างระหว่างเพียงชุดของห้องสมุดและกรอบที่:

กรอบสามารถกำหนดเป็นชุดของห้องสมุดที่พูดว่า "อย่าโทรหาเราเราจะโทรหาคุณ"

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


8

คำอธิบายง่ายๆคือ: เฟรมเวิร์กเป็นโครงที่คุณสามารถสร้างแอพพลิเคชั่นได้

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

อาจไม่ใช่ถ้อยคำที่ดีที่สุด แต่ฉันหวังว่ามันจะช่วยได้


1
ที่จริงแล้วมันเหมือนกับการสร้างแอปพลิเคชันลงในนั่งร้านมากกว่ารอบ ๆมัน
Jörg W Mittag

4

ในระดับต่ำสุดกรอบคือสภาพแวดล้อมที่คุณจะได้รับชุดเครื่องมือในการทำงาน

เครื่องมือนี้มาในรูปแบบของไลบรารีไฟล์กำหนดค่า ฯลฯ

สิ่งนี้เรียกว่า "สภาพแวดล้อม" ช่วยให้คุณมีการตั้งค่าพื้นฐาน (การรายงานข้อผิดพลาดไฟล์บันทึกการตั้งค่าภาษา ฯลฯ ) ... ซึ่งสามารถแก้ไขขยายและสร้างขึ้นได้

คนจริงไม่จำเป็นต้องมีกรอบมันเป็นเรื่องของการต้องการประหยัดเวลาและคนอื่น ๆ ก็เป็นเรื่องของการตั้งค่าส่วนตัว

คนจะแสดงให้เห็นว่าด้วยกรอบคุณไม่ต้องเขียนโค้ดตั้งแต่ต้น แต่นั่นเป็นเพียงคนที่สับสนกับกรอบห้องสมุด

ฉันไม่ได้ลำเอียงที่นี่ฉันใช้กรอบจริงๆตอนนี้


4

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


2

เฟรมเวิร์กจัดเตรียมฟังก์ชันการทำงาน / โซลูชันให้กับพื้นที่ปัญหาเฉพาะ
คำนิยามจากwiki :

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


มีคำในประโยคแรก "นามธรรม" คุณหมายถึงอะไร ? เราจะใช้สิ่งที่เป็นนามธรรม
Kumaresan Perumal

2

เฟรมเวิร์กช่วยเราเกี่ยวกับการใช้ "สร้างขึ้นแล้ว" metaphore สามารถเป็นได้,

คิดว่าวัสดุจากพื้นโลกเป็นภาษาโปรแกรม

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


2

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

แก้ไข: ตกลงฉันจะขุดสิ่งที่พวกคุณพยายามจะบอกฉัน;) คุณอาจไม่ได้สังเกตเห็นข้อมูลระหว่างบรรทัด "งานที่ครอบคลุมกรอบรอบ ... " ก่อนที่จะลดลงลึกและลึก ฉันพยายามที่จะให้ชั้นไปหวังคุณ gracfully:
คำอธิบายที่ดีกับคำถาม "ความแตกต่างระหว่างห้องสมุดและกรอบ" ผมพบได้ที่นี่
http://ifacethoughts.net/2007/06/04/difference-between- ที่มีห้องสมุดและ-a-กรอบ /


ทั้งหมดไม่เข้าใจคะแนนลง ... ฉันตะลึงอย่างสมบูรณ์เกี่ยวกับเรื่องนี้ คำถามคือการเรียงลำดับของการเริ่มต้นคำถามพื้นฐานและคำตอบของฉันถูกตามที่ดีเป็นธรรม ...
OlimilOops

4
เพื่อความชัดเจน: ฉันไม่ได้ลงคะแนน อย่างไรก็ตามสิ่งที่คุณกำลังพูดถึงอยู่ในระดับต่ำกว่ากรอบที่เกี่ยวข้อง การรวบรวมและจัดเรียงอัลกอริทึมเป็นของไลบรารีมาตรฐานมากกว่า Frameworks ตัวอย่างเช่น
bakkal

1
ขอบคุณสำหรับคำตอบ แต่ ... มันไม่ใช่คำตอบสำหรับคำถามของฉัน ตามคำถามของ OP การแยกแยะความแตกต่างระหว่าง "ไลบรารีมาตรฐาน" และ "กรอบ" เป็นที่ที่ผิดที่นี่ เช่นใน. net-framework คุณสามารถค้นหา namespace collection ในส่วนของ framework ที่ฉันไม่เคยได้ยินใครพูดว่า namespace collecsion นั้นไม่ได้เป็นส่วนหนึ่งของ. netframework ดังนั้นคำตอบของคุณสำหรับคำถามของฉันผิด
OlimilOops

1
นี่คือความหมายของการเป็นห้องสมุด มันคิดถึงลักษณะเด่นของกรอบเมื่อเทียบกับห้องสมุด: ผกผันของการควบคุม
Jörg W Mittag

2

นอกเหนือจากคำจำกัดความซึ่งบางครั้งก็เข้าใจได้ถ้าคุณเข้าใจแล้วตัวอย่างช่วยฉัน

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

ฉันได้รับสิทธินี้หรือไม่?

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