ใครช่วยอธิบายหน่อยได้ไหมว่าซอฟต์แวร์เฟรมเวิร์กคืออะไร? ทำไมเราต้องมีกรอบ? กรอบทำอะไรเพื่อให้การเขียนโปรแกรมง่ายขึ้น?
ใครช่วยอธิบายหน่อยได้ไหมว่าซอฟต์แวร์เฟรมเวิร์กคืออะไร? ทำไมเราต้องมีกรอบ? กรอบทำอะไรเพื่อให้การเขียนโปรแกรมง่ายขึ้น?
คำตอบ:
ฉันสายเกินไปที่จะตอบ แต่ฉันอยากจะแบ่งปันตัวอย่างหนึ่งซึ่งฉันคิดเพียงวันนี้ ถ้าฉันบอกให้คุณตัดกระดาษที่มีขนาด 5 ม. x 5 ม. ถ้าอย่างนั้นคุณก็จะทำเช่นนั้น แต่สมมติว่าฉันขอให้คุณตัดกระดาษ 1,000 แผ่นที่มีขนาดเท่ากัน ในกรณีนี้คุณจะไม่ทำการวัด 1,000 ครั้ง เห็นได้ชัดว่าคุณจะทำกรอบ 5 ม. x 5 ม. แล้วด้วยความช่วยเหลือของมันคุณจะสามารถตัดกระดาษ 1,000 ชิ้นในเวลาน้อยลง ดังนั้นสิ่งที่คุณทำคือทำกรอบซึ่งจะทำหน้าที่เฉพาะประเภท แทนที่จะทำภารกิจประเภทเดียวกันซ้ำแล้วซ้ำอีกสำหรับแอปพลิเคชั่นประเภทเดียวกันคุณสร้างกรอบการทำงานที่มีสิ่งอำนวยความสะดวกเหล่านั้นทั้งหมดเข้าด้วยกันในแพ็คเก็ตอันสวยงามเพียงใบเดียว
ในทางเทคนิคคุณไม่จำเป็นต้องมีกรอบ หากคุณกำลังสร้างเว็บไซต์ที่เรียบง่ายจริงๆ (คิดถึงเว็บในปี 1992) คุณสามารถทำได้ทั้งหมดด้วย HTML ที่กำหนดโค้ดยากและ CSS
และถ้าคุณต้องการสร้างเว็บแอพที่ทันสมัยคุณไม่จำเป็นต้องใช้เฟรมเวิร์คสำหรับสิ่งนั้น
คุณสามารถเลือกที่จะเขียนตรรกะทั้งหมดที่คุณต้องการด้วยตัวเองทุกครั้ง คุณสามารถเขียน data-persistence / storage layer ของคุณเองหรือ - ถ้าคุณยุ่งมาก - เพียงแค่เขียน SQL แบบกำหนดเองสำหรับการเข้าถึงฐานข้อมูลทุกครั้ง คุณสามารถเขียนเลเยอร์การรับรองความถูกต้องและการจัดการเซสชัน และตรรกะการสร้างเท็มเพลตของคุณเอง และตรรกะการจัดการข้อยกเว้นของคุณเอง และฟังก์ชั่นความปลอดภัยของคุณเอง และกรอบการทดสอบหน่วยของคุณเองเพื่อให้แน่ใจว่าทุกอย่างทำงานได้ดี และของคุณเอง ... [ดำเนินต่อไปเป็นเวลานาน]
จากนั้นอีกครั้งถ้าคุณทำใช้กรอบคุณจะสามารถที่จะได้รับประโยชน์จากดีที่มักจะ peer-reviewed และการทำงานผ่านการทดสอบอย่างดีของโหลถ้าไม่นับของนักพัฒนาอื่น ๆ ที่อาจจะดีดีกว่าคุณ คุณจะได้รับการสร้างสิ่งที่คุณต้องการอย่างรวดเร็วโดยไม่ต้องเสียเวลาสร้างหรือกังวลมากเกินไปเกี่ยวกับรายการโครงสร้างพื้นฐานด้านบน
คุณสามารถทำงานได้มากขึ้นในเวลาที่น้อยลงและรู้ว่ารหัสเฟรมเวิร์กที่คุณใช้หรือขยายมีแนวโน้มที่จะทำได้ดีกว่าที่คุณทำเองทั้งหมด
และราคาของสิ่งนี้? ลงทุนเวลาเรียนรู้กรอบ แต่ - ตามความจริงทุก ๆ เว็บที่ออกจะมีการยืนยัน - มันคุ้มค่ากับเวลาที่ใช้ในการเรียนรู้ที่จะได้รับประโยชน์มากมาย
สรุปที่ Wikipedia (Software Framework) (google hit btw แรก) อธิบายได้ค่อนข้างดี:
เฟรมเวิร์กซอฟต์แวร์ในการเขียนโปรแกรมคอมพิวเตอร์เป็นสิ่งที่เป็นนามธรรมซึ่งรหัสทั่วไปที่ให้ฟังก์ชันการทำงานทั่วไปสามารถถูกแทนที่หรือเลือกโดยผู้เชี่ยวชาญโดยรหัสผู้ใช้ที่มีฟังก์ชั่นเฉพาะ เฟรมเวิร์กเป็นกรณีพิเศษของไลบรารีซอฟต์แวร์ซึ่งเป็นโค้ดนามธรรมที่สามารถนำมาใช้ซ้ำได้ซึ่งห่อไว้ใน Application Programming Interface (API) ที่ได้รับการกำหนดไว้อย่างดี
เฟรมเวิร์กซอฟต์แวร์มีคุณสมบัติที่แตกต่างเหล่านี้ซึ่งแยกพวกเขาออกจากไลบรารีหรือแอปพลิเคชันผู้ใช้ปกติ:
- ผกผันของการควบคุม - ในกรอบซึ่งแตกต่างจากในไลบรารีหรือแอปพลิเคชันผู้ใช้ปกติโฟลว์การควบคุมโดยรวมของโปรแกรมไม่ได้ถูกกำหนดโดยผู้เรียก แต่ตามกรอบ [1]
- พฤติกรรมเริ่มต้น - กรอบมีพฤติกรรมเริ่มต้น พฤติกรรมเริ่มต้นนี้จะต้องเป็นพฤติกรรมที่มีประโยชน์และไม่ใช่ชุดของตัวเลือก
- extensibility - เฟรมเวิร์กสามารถขยายได้โดยผู้ใช้โดยปกติแล้วโดยการเลือกเฉพาะหรือรหัสเฉพาะสำหรับผู้ใช้ที่มีฟังก์ชั่นเฉพาะ
- รหัสเฟรมเวิร์กที่ไม่สามารถแก้ไขได้ - โค้ดเฟรมเวิร์กโดยทั่วไปไม่ได้รับอนุญาตให้แก้ไข ผู้ใช้สามารถขยายกรอบงานได้ แต่ไม่สามารถแก้ไขรหัสได้
คุณอาจ "ต้องการ" เพราะอาจให้ทางลัดที่ยอดเยี่ยมแก่คุณในการพัฒนาแอพพลิเคชั่นเนื่องจากมันมีฟังก์ชั่นการเขียนและทดสอบจำนวนมากอยู่แล้ว เหตุผลค่อนข้างคล้ายกับเหตุผลที่เราใช้ไลบรารีซอฟต์แวร์
มีคำตอบที่ดีอยู่แล้ว แต่ให้ฉันดูว่าฉันสามารถให้มุมมองอื่นกับคุณได้หรือไม่
ลดความซับซ้อนของสิ่งต่าง ๆ เล็กน้อยคุณสามารถดูเฟรมเวิร์กเป็นแอปพลิเคชันที่เสร็จสมบูรณ์ยกเว้นฟังก์ชันการทำงานจริง คุณเสียบฟังก์ชั่นการทำงานและ PRESTO! คุณมีแอปพลิเคชัน
พิจารณาพูดเป็นกรอบ GUI เฟรมเวิร์กประกอบด้วยทุกสิ่งที่คุณต้องการในการสร้างแอปพลิเคชัน แน่นอนว่าคุณมักจะสามารถสร้างแอปพลิเคชั่นเล็ก ๆ น้อย ๆ ที่มีแหล่งที่มาเพียงไม่กี่บรรทัดที่ไม่ได้ทำอะไรเลย - แต่มันให้การจัดการหน้าต่างการจัดการหน้าต่างย่อย, เมนู, แถบปุ่ม, ฯลฯ นั่นคือด้านโครงงาน ด้วยการเพิ่มฟังก์ชั่นแอปพลิเคชันของคุณและ "เสียบเข้ากับ" ในตำแหน่งที่ถูกต้องในกรอบคุณทำให้แอพที่ว่างเปล่านี้ไม่ทำอะไรมากไปกว่าการจัดการหน้าต่างและอื่น ๆ ให้กลายเป็นแอปพลิเคชั่นเต็มรูปแบบ
มีเฟรมเวิร์กที่คล้ายกันสำหรับแอพพลิเคชั่นเว็บสำหรับแอพฝั่งเซิร์ฟเวอร์ ฯลฯ ในแต่ละกรณีเฟรมเวิร์กจะให้รหัสซ้ำ ๆ ที่น่าเบื่อและซ้ำซ้อน (หวังว่า) ในขณะที่คุณมีฟังก์ชันโดเมนปัญหาจริง (นี่คืออุดมคติในความเป็นจริงแน่นอนความสำเร็จของกรอบงานนั้นแปรปรวนอย่างมาก)
ฉันเน้นอีกครั้งว่านี่เป็นมุมมองที่เรียบง่ายของกรอบงาน ฉันไม่ได้ใช้คำที่น่ากลัวเช่น "การกลับกันของการควบคุม" และสิ่งที่คล้ายกันถึงแม้ว่ากรอบงานส่วนใหญ่จะมีแนวคิดที่น่ากลัวในตัว ตั้งแต่คุณเป็นผู้เริ่มต้นฉันคิดว่าฉันจะขอศัพท์แสงให้กับคุณและไปอย่างง่าย ๆ
ฉันไม่แน่ใจว่ามีคำจำกัดความที่ชัดเจนของ "กรอบงาน" บางครั้งชุดห้องสมุดขนาดใหญ่เรียกว่ากรอบการทำงาน แต่ฉันคิดว่าการใช้คำทั่วไปนั้นใกล้เคียงกับคำจำกัดความของ aioobe
นี้บทความที่ดีมากผลรวมถึงความแตกต่างระหว่างเพียงชุดของห้องสมุดและกรอบที่:
กรอบสามารถกำหนดเป็นชุดของห้องสมุดที่พูดว่า "อย่าโทรหาเราเราจะโทรหาคุณ"
กรอบการทำงานช่วยคุณได้อย่างไร เพราะแทนที่จะเขียนอะไรบางอย่างตั้งแต่เริ่มต้นคุณเพียงแค่ขยายแอปพลิเคชั่นที่ทำงานให้ คุณได้รับผลผลิตจำนวนมากด้วยวิธีนี้ - บางครั้งแอปพลิเคชันที่ได้อาจมีความละเอียดมากกว่าที่คุณเคยทำด้วยตัวคุณเองในกรอบเวลาเดียวกัน - แต่คุณมักจะแลกเปลี่ยนความยืดหยุ่นได้มากมาย
คำอธิบายง่ายๆคือ: เฟรมเวิร์กเป็นโครงที่คุณสามารถสร้างแอพพลิเคชั่นได้
โดยทั่วไปเฟรมเวิร์กจะให้ฟังก์ชันการทำงานพื้นฐานบางอย่างซึ่งคุณสามารถใช้และขยายเพื่อสร้างแอพพลิเคชั่นที่ซับซ้อนมากขึ้นจากนั้นมีเฟรมเวิร์กสำหรับทุกสิ่ง กรอบ MVC ของ Microsoft เป็นตัวอย่างที่ดีของสิ่งนี้ มันให้ทุกสิ่งที่คุณต้องการออกจากเว็บไซต์การสร้างภาคพื้นดินโดยใช้รูปแบบ MVC จัดการกับคำขอทางเว็บเส้นทางและสิ่งที่ชอบ สิ่งที่คุณต้องทำคือการใช้ "ตัวควบคุม" และให้ "มุมมอง" ซึ่งเป็นสองโครงสร้างที่กำหนดโดยกรอบ MVC เฟรมเวิร์ก MVC จะจัดการกับการเรียกตัวควบคุมของคุณและแสดงมุมมองของคุณ
อาจไม่ใช่ถ้อยคำที่ดีที่สุด แต่ฉันหวังว่ามันจะช่วยได้
ในระดับต่ำสุดกรอบคือสภาพแวดล้อมที่คุณจะได้รับชุดเครื่องมือในการทำงาน
เครื่องมือนี้มาในรูปแบบของไลบรารีไฟล์กำหนดค่า ฯลฯ
สิ่งนี้เรียกว่า "สภาพแวดล้อม" ช่วยให้คุณมีการตั้งค่าพื้นฐาน (การรายงานข้อผิดพลาดไฟล์บันทึกการตั้งค่าภาษา ฯลฯ ) ... ซึ่งสามารถแก้ไขขยายและสร้างขึ้นได้
คนจริงไม่จำเป็นต้องมีกรอบมันเป็นเรื่องของการต้องการประหยัดเวลาและคนอื่น ๆ ก็เป็นเรื่องของการตั้งค่าส่วนตัว
คนจะแสดงให้เห็นว่าด้วยกรอบคุณไม่ต้องเขียนโค้ดตั้งแต่ต้น แต่นั่นเป็นเพียงคนที่สับสนกับกรอบห้องสมุด
ฉันไม่ได้ลำเอียงที่นี่ฉันใช้กรอบจริงๆตอนนี้
โดยทั่วไปการทำงานของเฟรมเป็นโครงสร้างจริงหรือแนวคิดที่มีวัตถุประสงค์เพื่อใช้เป็นส่วนสนับสนุนหรือแนวทางสำหรับการสร้างสิ่งที่ขยายโครงสร้างให้เป็นสิ่งที่มีประโยชน์ ...
เฟรมเวิร์กจัดเตรียมฟังก์ชันการทำงาน / โซลูชันให้กับพื้นที่ปัญหาเฉพาะ
คำนิยามจากwiki :
เฟรมเวิร์กซอฟต์แวร์ในการเขียนโปรแกรมคอมพิวเตอร์เป็นสิ่งที่เป็นนามธรรมซึ่งรหัสทั่วไปที่ให้ฟังก์ชันการทำงานทั่วไปสามารถถูกแทนที่หรือเลือกโดยผู้เชี่ยวชาญโดยรหัสผู้ใช้ที่มีฟังก์ชั่นเฉพาะ เฟรมเวิร์กเป็นกรณีพิเศษของไลบรารีซอฟต์แวร์ซึ่งเป็นโค้ดนามธรรมที่สามารถนำมาใช้ซ้ำได้ซึ่งห่อไว้ใน Application Programming Interface (API) ที่ได้รับการกำหนดไว้อย่างดี
เฟรมเวิร์กช่วยเราเกี่ยวกับการใช้ "สร้างขึ้นแล้ว" metaphore สามารถเป็นได้,
คิดว่าวัสดุจากพื้นโลกเป็นภาษาโปรแกรม
และตัวอย่างเช่น "กล้อง" เป็นโปรแกรมและคุณตัดสินใจที่จะสร้างสมุดบันทึก คุณไม่จำเป็นต้องสร้างกล้องใหม่ทุกครั้งคุณเพียงแค่ใช้เฟรมเวิร์กดิน (ตัวอย่างเช่นที่ร้านเทคโนโลยี) นำกล้องและรวมเข้ากับโน้ตบุ๊กของคุณ
กรอบงานมีฟังก์ชั่นบางอย่างที่คุณอาจต้องการ คุณอาจต้องการอาร์เรย์บางอย่างที่มีกลไกการเรียงลำดับแบบ inbuilt หรือบางทีคุณอาจต้องการหน้าต่างที่คุณต้องการวางตัวควบคุมบางอย่างทั้งหมดที่คุณสามารถหาได้ในกรอบงาน มันเป็นงานประเภทหนึ่งที่ครอบคลุมกรอบงานของคุณ
แก้ไข: ตกลงฉันจะขุดสิ่งที่พวกคุณพยายามจะบอกฉัน;) คุณอาจไม่ได้สังเกตเห็นข้อมูลระหว่างบรรทัด "งานที่ครอบคลุมกรอบรอบ ... " ก่อนที่จะลดลงลึกและลึก ฉันพยายามที่จะให้ชั้นไปหวังคุณ gracfully:
คำอธิบายที่ดีกับคำถาม "ความแตกต่างระหว่างห้องสมุดและกรอบ" ผมพบได้ที่นี่
http://ifacethoughts.net/2007/06/04/difference-between- ที่มีห้องสมุดและ-a-กรอบ /
นอกเหนือจากคำจำกัดความซึ่งบางครั้งก็เข้าใจได้ถ้าคุณเข้าใจแล้วตัวอย่างช่วยฉัน
ฉันคิดว่าฉันมีความเข้าใจอย่างรวดเร็วเมื่อเห็นการเรียงลำดับรายการใน. Net; ตัวอย่างของเฟรมเวิร์กที่จัดเตรียมฟังก์ชันการทำงานที่ปรับแต่งโดยรหัสผู้ใช้ที่มีฟังก์ชั่นเฉพาะ ใช้รายการ. เรียงลำดับ (IComparer) อัลกอริทึมการเรียงลำดับซึ่งอยู่ในกรอบงาน. Net ในเมธอดเรียงลำดับจำเป็นต้องทำชุดข้อมูลเปรียบเทียบ วัตถุ A มาก่อนหรือหลังวัตถุ B แต่เรียงตัวเองไม่มีเงื่อนงำวิธีการเปรียบเทียบ; เฉพาะประเภทที่เรียงลำดับเท่านั้นที่รู้ คุณไม่สามารถเขียนอัลกอริธึมการเรียงลำดับการเปรียบเทียบที่ผู้ใช้หลายคนสามารถนำกลับมาใช้ใหม่ได้และคาดว่าจะมีการเรียงลำดับทั้งหมดที่คุณต้องการ คุณต้องปล่อยให้บิตของงานนั้นขึ้นอยู่กับผู้ใช้เอง ดังนั้นที่นี่เรียงลำดับอาคากรอบเรียกกลับไปยังวิธีการในรหัสผู้ใช้ประเภทที่ถูกเรียงลำดับเพื่อให้สามารถทำการเปรียบเทียบ (หรือผู้รับมอบสิทธิ์สามารถใช้งานได้;
ฉันได้รับสิทธินี้หรือไม่?