คำถามติดแท็ก backward-compatibility

14
รักษาภาษาการเขียนโปรแกรมไว้ด้านหลังและแก้ไขข้อบกพร่อง
ขั้นแรกให้บริบท (สิ่งที่คุณส่วนใหญ่รู้อยู่แล้ว): ภาษาการเขียนโปรแกรมยอดนิยมทุกภาษามีวิวัฒนาการที่ชัดเจนเวลาส่วนใหญ่ถูกทำเครื่องหมายโดยเวอร์ชัน: คุณมี Java 5, 6, 7 ฯลฯ , PHP 5.1, 5.2, 5.3 ฯลฯ การปล่อยเวอร์ชันใหม่ทำให้ API ใหม่พร้อมใช้งานแก้ไขข้อบกพร่องเพิ่ม คุณสมบัติใหม่กรอบใหม่ ฯลฯ ดังนั้นทั้งหมด: ดี แต่ปัญหาของภาษา (หรือแพลตฟอร์ม) เกี่ยวกับอะไร? หากและเมื่อมีสิ่งผิดปกติในภาษานักพัฒนาอาจหลีกเลี่ยง (ถ้าพวกเขาสามารถ) หรือพวกเขาเรียนรู้ที่จะอยู่กับมัน ตอนนี้ผู้พัฒนาภาษาเหล่านั้นได้รับข้อเสนอแนะมากมายจากโปรแกรมเมอร์ที่ใช้ภาษาเหล่านั้น ดังนั้นจึงเป็นเรื่องที่เข้าใจได้ว่าเมื่อเวลา (และหมายเลขเวอร์ชั่น) ผ่านไปปัญหาในภาษาเหล่านั้นจะช้าลง แต่จะหายไปอย่างแน่นอน ก็ไม่ได้จริงๆ ทำไม? ความเข้ากันได้ย้อนหลังนั่นเป็นเหตุผล แต่ทำไมถึงเป็นเช่นนั้น? อ่านด้านล่างสำหรับสถานการณ์ที่เป็นรูปธรรมมากขึ้น วิธีที่ดีที่สุดที่ฉันสามารถอธิบายคำถามของฉันคือการใช้ PHP เป็นตัวอย่าง: PHP เป็นที่รักและเกลียดชังคนหลายพันคน ทุกภาษามีข้อบกพร่อง แต่เห็นได้ชัดว่า PHP นั้นพิเศษ ลองดูโพสต์บล็อกนี้ มันมีรายการที่ยาวมากของข้อบกพร่องที่เรียกว่าใน PHP …

7
เมื่อใดที่จะอัพเดต jQuery
เมื่อคุณแนะนำให้อัพเดต jQuery / jQuery UI หรือกล่าวอีกนัยหนึ่ง: วิธีปฏิบัติที่ดีที่สุดสำหรับการอัพเดต jQuery / jQuery UI คืออะไร? ฉันกำลังทำงานในโครงการที่ยาวนานซึ่งจะใช้เวลาอย่างน้อยหนึ่งปี ในช่วงเวลานั้นฉันมั่นใจว่า jQuery / jQuery UI จะได้รับการอัปเดตหลายครั้ง คุณแนะนำให้อัปเดตไฟล์ jQuery / jQuery UI ทุกครั้งที่มีการเผยแพร่หรือไม่ หรือดีกว่าที่จะติดกับรุ่นใดรุ่นหนึ่งจนกว่าจะสิ้นสุดโครงการ? ฉันกลัวที่จะ“ เปลี่ยนแปลง” รหัสและทุกครั้งที่มีการอัพเดทฉันต้องทดสอบทุกอย่าง ใช้เวลามากเกินไป แต่ในทางกลับกันหากฉันไม่ได้อัปเดตฉันกลัวข้อบกพร่องที่ภายหลังจะกัดฉันที่ด้านหลัง โครงการเป็น ASP.MVC และฉันใช้ jQuery มาก ความคิดใด ๆ

1
เหตุใดเบอร์ทรานด์เมเยอร์จึงคิดว่าการแบ่งคลาสย่อยเป็นวิธีเดียวที่จะขยายโมดูล“ ปิด”?
ในการสร้างซอฟต์แวร์เชิงวัตถุของเมเยอร์(1988) เขาได้กำหนดหลักการเปิด / ปิดดังต่อไปนี้: โมดูลจะได้รับการกล่าวถึงว่าเป็นเปิดถ้ามันยังคงมีอยู่สำหรับส่วนขยาย ตัวอย่างเช่นควรเป็นไปได้ที่จะเพิ่มเขตข้อมูลลงในโครงสร้างข้อมูลที่มีอยู่หรือองค์ประกอบใหม่ในชุดของฟังก์ชันที่ดำเนินการ โมดูลจะถูกปิดหากมีการใช้งานโดยโมดูลอื่น นี่ถือว่าโมดูลนั้นได้รับการกำหนดรายละเอียดที่ดีและมีเสถียรภาพ (อินเทอร์เฟซในแง่ของการซ่อนข้อมูล) เขาพูดต่อไปว่า: หากคุณเปิดโมดูลอีกครั้งคุณจะต้องเปิดไคลเอนต์ทั้งหมดอีกครั้งเพื่ออัปเดตโมดูลเนื่องจากใช้รุ่นเก่า … [ปัญหานี้] เกิดขึ้นทุกครั้งที่โมดูลจะต้องถูกขยายโดยฟังก์ชั่นใหม่หรือองค์ประกอบข้อมูลทำให้เกิดการเปลี่ยนแปลงในไคลเอนต์ทั้งทางตรงและทางอ้อม ... ด้วยวิธีการคลาสสิกในการออกแบบและการเขียนโปรแกรมจึงไม่มีวิธีเขียนโมดูลที่เปิดและปิด วิธีการแก้ปัญหาของเมเยอร์ในภาวะที่กลืนไม่เข้าคายไม่ออกนี้คือ: ไม่ขยายโมดูลห้องสมุดโดยการปรับเปลี่ยนคลาสที่มีอยู่; ให้เขียนโมดูลใหม่แทนคลาสย่อยที่มีอยู่แล้วและให้ไคลเอนต์ใหม่พึ่งพาโมดูลใหม่นั้น ตอนนี้ในปี 1988 ฉันเขียนโปรแกรมของเล่น (ขั้นตอน) ใน Turbo Pascal และ Blankenship Basic และประสบการณ์ระดับมืออาชีพในศตวรรษที่ 21 ของฉันคือ JVM, CLR และในภาษาไดนามิกดังนั้นฉันจึงไม่รู้ว่า Meyer แปลว่าอะไร โดย "แนวทางคลาสสิคเพื่อการออกแบบและการเขียนโปรแกรม" ตัวอย่างหนึ่งที่เป็นรูปธรรมของเมเยอร์ที่ว่าทำไมโมดูลลูกค้าจึงต้องเปิดใหม่ (คำสั่งเปลี่ยนจากการแจงนับซึ่งขณะนี้มีสมาชิกมากขึ้นต้องใช้เคสมากขึ้น) ดูสมเหตุสมผลพอสมควร แต่เขาไม่เกือบยืนยันว่าทุกครั้งที่คุณเพิ่มฟังก์ชันการทำงาน โมดูลคุณต้องอัปเดตไคลเอ็นต์ทั้งหมด มีเหตุผลทางประวัติศาสตร์ที่การยืนยันนี้ดูเหมือนชัดเจนในปี 1988? พูดหรือไม่ว่าการเพิ่มฟังก์ชั่นหรือโครงสร้างข้อมูลไปยัง C static library …

13
คุณลักษณะ C # หรือ. Net เพื่อตัดออกโดยไม่จำเป็นต้องใช้ความเข้ากันได้แบบย้อนหลังได้หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ผลิตภัณฑ์หรือกรอบงานใด ๆ วิวัฒนาการ โดยหลักแล้วมันจะทำเพื่อให้ทันกับความต้องการของผู้ใช้และใช้ประโยชน์จากพลังการประมวลผลใหม่และทำให้ดีขึ้น บางครั้งเป้าหมายการออกแบบหลักก็เปลี่ยนแปลงกับผลิตภัณฑ์ C # หรือ. net framework จะไม่มีข้อยกเว้น อย่างที่เราเห็นรุ่นปัจจุบันของรุ่นที่ 4 แตกต่างกันมากเมื่อเทียบกับรุ่นแรก แต่สิ่งที่มาเป็นสิ่งกีดขวางต่อความเข้ากันได้ของวิวัฒนาการนี้ ในส่วนใหญ่ของเฟรมเวิร์ก / ผลิตภัณฑ์มีคุณสมบัติที่จะถูกตัดออกหากไม่จำเป็นต้องรองรับความเข้ากันได้ย้อนหลัง คุณสมบัติเหล่านี้ใน C # /. net คืออะไร กรุณาพูดถึงหนึ่งคุณสมบัติต่อคำตอบ

3
ฉันควรใช้ Java เวอร์ชันใดสำหรับแอปพลิเคชันเดสก์ท็อปเพื่อเข้าถึงผู้ใช้ส่วนใหญ่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันถูกต้องหรือไม่ที่จะสันนิษฐานว่าผู้ใช้ปลายทางส่วนใหญ่ใช้เวอร์ชันเก่ากว่า Java 8? เนื่องจากฉันไม่ต้องการบังคับให้คนอัปเกรดเพื่อใช้แอปพลิเคชันของฉันฉันควรวางแผนให้ใช้ Java 7 หรือ 6 ตั้งแต่เริ่มต้นถึงแม้ว่าจะหมายความว่าฉันไม่สามารถใช้ประโยชน์จากเวอร์ชั่นใหม่สำหรับตัวเองได้ ในฐานะนักพัฒนา

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

3
การออกแบบที่ดีสำหรับการอนุญาตให้ใช้งานร่วมกันได้ของไฟล์ย้อนหลังระหว่างซอฟต์แวร์รุ่นต่างๆคืออะไร
การออกแบบที่ดีสำหรับการอนุญาตให้ใช้งานร่วมกันได้ของชนิดไฟล์ระหว่างซอฟต์แวร์รุ่นต่าง ๆ คืออะไร ตัวอย่างเช่น Microsoft จะรับ Word 2007, 2010 และ 2013 และอื่น ๆ ... ไปยังไฟล์ docx ที่เปิดอยู่ทั้งหมดได้อย่างไร แต่รุ่นที่แตกต่างกันสามารถบันทึกข้อมูลได้มากขึ้นและน้อยลงและบันทึกข้อมูลในรูปแบบที่แตกต่างกันเล็กน้อย ไฟล์ที่บันทึกในรุ่นหนึ่งสามารถเปิดได้ในอีกรุ่นหนึ่ง แต่องค์ประกอบบางอย่างของไฟล์อาจไม่สามารถใช้งานได้ในเวอร์ชั่นที่เก่ากว่า ฉันหมายความว่าวิธีที่ชัดเจนจริงๆที่จะมีบางอย่าง private string openfile(string filename) { File.Open(filename) ... some logic that gets a header from the file that will never change switch (fileversion) case 2007: ..... case 2010 ..... case …

2
. NET Framework ย้อนหลังเข้ากันได้คืออะไร?
เราพัฒนาแอปพลิเคชั่น windows ใน. NET 4 ด้วยฐานข้อมูล MySQL เมื่อเรากำลังจะปรับใช้แอปพลิเคชันนั้นเราจะติดตั้ง. NET Framework 4 ในไคลเอนต์ของเราจากนั้นเมื่อติดตั้ง. NET Connector for MySQL จะต้องใช้. NET Framework 3.5 แต่ติดตั้ง. NET 4 ไว้แล้ว . NET Framework ไม่รองรับการทำงานย้อนหลังหรือไม่ เราลงเอยด้วยการติดตั้ง. NET Framework สอง (3.5 และ 4) ซึ่งไม่เล็กในขนาดดิสก์ ความเข้ากันได้ย้อนหลังหมายถึงอะไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.