วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

6
เป็นวิธีที่ดีที่สุดในการจัดการ refactoring ไฟล์ขนาดใหญ่อะไร
ขณะนี้ฉันกำลังทำงานในโครงการที่ใหญ่กว่าซึ่งน่าเสียดายที่มีไฟล์บางไฟล์ที่มีแนวทางด้านคุณภาพซอฟต์แวร์ที่ไม่ได้ติดตามตลอด ซึ่งรวมถึงไฟล์ขนาดใหญ่ (อ่าน 2,000-4,000 บรรทัด) ซึ่งมีฟังก์ชั่นการใช้งานที่แตกต่างกันอย่างชัดเจน ตอนนี้ฉันต้องการ refactor ไฟล์ขนาดใหญ่เหล่านี้เป็นไฟล์เล็ก ๆ หลายไฟล์ ปัญหาคือเนื่องจากพวกเขามีขนาดใหญ่หลายคน (รวมฉัน) ในสาขาต่าง ๆ กำลังทำงานกับไฟล์เหล่านี้ ดังนั้นฉันจึงไม่สามารถแยกจากการพัฒนาและการสร้างซ้ำได้เนื่องจากการรวมการปรับเปลี่ยนเหล่านี้เข้ากับการเปลี่ยนแปลงของคนอื่นจะกลายเป็นเรื่องยาก แน่นอนว่าเราต้องการให้ทุกคนรวมกลับไปพัฒนา "หยุด" ไฟล์ (เช่นไม่อนุญาตให้ใครแก้ไขอีกต่อไป) สร้างใหม่และจากนั้น "ยกเลิกการตรึง" แต่สิ่งนี้ก็ไม่ได้ดีเช่นกันเนื่องจากจะทำให้ทุกคนต้องหยุดทำงานในไฟล์เหล่านี้โดยทั่วไปจนกว่าจะทำการเปลี่ยนโครงสร้างใหม่ ดังนั้นมีวิธีการ refactor ไม่ต้องการให้คนอื่นหยุดทำงาน (นาน) หรือผสานสาขาคุณลักษณะของพวกเขาเพื่อพัฒนา?

8
การทดสอบเพื่อการพัฒนาที่ขับเคลื่อนด้วยการทดสอบ (TDD) เป็นการทดสอบแบบหน่วยเสมอหรือไม่
ฉันเข้าใจการพัฒนาโดยใช้การทดสอบจนคุณได้รับอนุญาตให้เขียนโค้ดที่มีประสิทธิผลเมื่อคุณมีการทดสอบหน่วยที่ล้มเหลว (สีแดง) จากนี้ฉันมีคำถามว่าวิธีการทดสอบที่ขับเคลื่อนด้วยสามารถนำไปใช้กับการทดสอบรูปแบบอื่น ๆ
41 testing  tdd 

13
มันไม่มีเหตุผลที่จะคาดหวังใด ๆ () * ไม่ * ที่จะโยนข้อยกเว้นอ้างอิงเป็นโมฆะ?
เมื่อคุณสร้างวิธีการขยายที่คุณสามารถทำได้แน่นอนว่าเรียกใช้บนnullแต่ไม่เหมือนกับการเรียกใช้วิธีการแบบอินสแตนซ์การเรียกใช้แบบ null ไม่จำเป็นต้องมีเครื่องหมายNullReferenceException-> คุณต้องตรวจสอบและโยนด้วยตนเอง สำหรับการดำเนินการตามวิธีส่วนขยายของ Linq Any()Microsoft ตัดสินใจว่าพวกเขาควรจะโยนArgumentNullException( https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/AnyAll.cs ) มันทำให้ฉันต้องเขียน if( myCollection != null && myCollection.Any() ) ฉันผิดในฐานะลูกค้าของรหัสนี้ที่จะคาดหวังว่าเช่น((int[])null).Any()ควรกลับมาfalse?

9
JS Boolean มีคุณสมบัติที่กำหนดเองเป็นแนวปฏิบัติที่ไม่ดีหรือไม่?
ใน JS คุณสามารถส่งคืนบูลีนที่มีคุณสมบัติแบบกำหนดเองได้ เช่น. เมื่อ Modernizr ทดสอบการรองรับวิดีโอจะส่งคืนtrueหรือfalseแต่ Boolean ที่ส่งคืน (Bool เป็นออบเจ็กต์ชั้นหนึ่งใน JS) มีคุณสมบัติที่ระบุรูปแบบที่สนับสนุน ตอนแรกมันทำให้ฉันประหลาดใจนิดหน่อย แต่จากนั้นฉันก็เริ่มชอบความคิดและเริ่มสงสัยว่าทำไมมันถึงถูกใช้อย่าง จำกัด ดูเหมือนว่าเป็นวิธีที่ยอดเยี่ยมในการจัดการกับสถานการณ์ทั้งหมดที่คุณต้องการทราบว่ามีบางสิ่งที่เป็นจริงหรือเท็จ แต่คุณอาจสนใจข้อมูลเพิ่มเติมบางอย่างที่คุณสามารถกำหนดได้โดยไม่ต้องกำหนดวัตถุส่งคืนแบบกำหนดเองหรือใช้ฟังก์ชัน ยอมรับพารามิเตอร์เพิ่มเติม วิธีนี้คุณจะรักษาลายเซ็นฟังก์ชันที่เป็นสากลโดยไม่ลดทอนความสามารถในการส่งคืนข้อมูลที่ซับซ้อน มีข้อโต้แย้ง 3 ข้อที่ฉันสามารถจินตนาการได้: มันค่อนข้างแปลก / คาดไม่ถึงเมื่อมันน่าจะดีกว่าสำหรับอินเทอร์เฟซใด ๆ ที่จะชัดเจนและไม่ยุ่งยาก นี่อาจเป็นอาร์กิวเมนต์คนฟาง แต่เป็นกรณีเล็กน้อยฉันสามารถจินตนาการมัน backfires เงียบ ๆ ใน JS optimizer, uglifier, VM หรือหลังจากการเปลี่ยนแปลงข้อกำหนดภาษาเล็กน้อยทำความสะอาด ฯลฯ มีวิธีที่ดีกว่ากระชับชัดเจนและเหมือนกันทุกประการ ดังนั้นคำถามของฉันคือมีเหตุผลใดที่ควรหลีกเลี่ยงการใช้ Booleans ด้วยคุณสมบัติเพิ่มเติมหรือไม่ พวกเขาเป็นกลอุบายหรือการรักษา? แผนบิดเตือน ข้างต้นเป็นคำถามเดิมในเกียรติศักดิ์เต็ม ในฐานะที่เป็น Matthew Crumley …

6
ทำไมไม่ส่งคืนวันที่เป็นสตริงจากฐานข้อมูล
ในเว็บแอปพลิเคชันทั่วไปวันที่จะถูกดึงจากเลเยอร์ฐานข้อมูลที่พิมพ์อย่างรุนแรง (เช่นใน c # เป็น System.DateTime ซึ่งตรงกันข้ามกับ System.String) เมื่อวันที่จะต้องแสดงเป็นสตริง (เช่นแสดงบนหน้า) การแปลงจาก DateTime เป็นสตริงจะทำในชั้นนำเสนอ ทำไมนี้ ทำไมการแปลง DateTime ให้เป็นสตริงในระดับฐานข้อมูลจึงเป็นเรื่องที่ไม่ดี ดูการอภิปรายที่ร้อนแรงในการแชทและคำถามเดิมที่เริ่มต้นสิ่งเหล่านี้ทั้งหมด

5
spinlock แตกต่างจากการเลือกตั้งอย่างไร
spinlock และการลงคะแนนเลือกตั้งเป็นสิ่งเดียวกันหรือไม่ วิกิพีเดีย: Spinlock เป็นล็อคซึ่งเป็นสาเหตุให้เธรดพยายามรับมันเพื่อรอในลูป ("หมุน") ในขณะที่ตรวจสอบซ้ำ ๆ ว่ามีล็อคอยู่หรือไม่ ฟังดูดีมาก ๆ : while(!ready); ฉันถูกสอนให้หลีกเลี่ยงการลงคะแนนเลือกตั้งทุกครั้งที่ทำได้ ดังนั้น spinlock เป็นชื่อแฟนซีสำหรับการเลือกตั้งเก่าที่ไม่ดีหรือไม่? spinlock แตกต่างจากการเลือกตั้งอย่างไร
41 locks  kernel  polling 

6
ทำไมเราถึงใช้คำว่า“ sprint”?
หนึ่งในหลักการก่อตั้งของการประกาศเปรียวคือ กระบวนการที่คล่องตัวส่งเสริมการพัฒนาที่ยั่งยืน ผู้สนับสนุนนักพัฒนาและผู้ใช้ควรจะสามารถรักษาอัตราการคงที่อย่างต่อเนื่อง ทีมการต่อสู้ใช้คำว่าsprintเพื่ออ้างถึงวัฏจักรการทำงาน (หรือเรียกอีกอย่างว่าการวนซ้ำ) อย่างไรก็ตามสิ่งนี้ไม่สมเหตุสมผลสำหรับฉัน ตามการวิ่งของ Google คือ: วิ่งด้วยความเร็วเต็มพิกัดในระยะทางสั้น ๆ มันไม่ยั่งยืน ทำไมทีมต่อสู้ใช้คำว่าวิ่ง ? ฉันรู้สึกขัดแย้งกับหนึ่งในหลักการพื้นฐานของ Agile

13
ทำไมคุณต้องระบุชนิดข้อมูลเมื่อประกาศตัวแปร?
ในภาษาการเข้ารหัสส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) คุณต้องประกาศตัวแปร ตัวอย่างเช่นใน C # ถ้ามันเป็นเขตข้อมูลจำนวนแล้ว int PhoneNumber ถ้าฉันใช้ภาษาอังกฤษปกติฉันไม่จำเป็นต้องประกาศPhoneNumberว่าintจะใช้มัน ตัวอย่างเช่นถ้าฉันขอให้แซมเพื่อนของฉันให้ฉันเขาบอกว่า: "แซมให้ฉันด้วยหมายเลขโทรศัพท์" ฉันจะไม่พูด "Char (20) แซมให้ฉันโทรศัพท์เบอร์" ทำไมเราต้องระบุชนิดข้อมูลเลย

7
การใช้เซิร์ฟเวอร์ฐานข้อมูลสมเหตุสมผลหรือไม่หากแอปพลิเคชันทำเฉพาะสิ่งที่อยู่ภายในเครื่อง
ฉันเคยเห็นบางแอปพลิเคชั่นซึ่งโดยทั่วไปคือแอพพลิเคชั่นซอฟต์แวร์ที่รันในระบบ (ดังนั้นพวกเขาจึงไม่มีการสื่อสารผ่านเครือข่ายมากนัก) แอ็พพลิเคชันเหล่านี้ดูเหมือนจะขึ้นอยู่กับเซิร์ฟเวอร์ฐานข้อมูลเพื่อเก็บข้อมูล ตัวอย่างของแอปพลิเคชันคือ Amarok (เครื่องเล่นเพลงยอดนิยมบน Linux) ฉันไม่รู้ว่าพวกเขายังคงทำเช่นนี้หรือไม่ แต่ฉันจำได้ว่ามีเวลาที่การติดตั้ง Amarok หมายความว่าคุณต้องติดตั้งเซิร์ฟเวอร์ MySQL และให้มันทำงานในพื้นหลังตลอดเวลา อะไรคือข้อดีของการใช้เซิร์ฟเวอร์สำหรับที่จัดเก็บในตัวเครื่องเปรียบเทียบกับการใช้โซลูชัน SQL แบบฝังตัวที่เล็กลงเช่น sqlite ฉันกำลังพูดถึงซอฟต์แวร์แอปพลิเคชันโดยทั่วไปไม่จำเป็นต้องเป็น Amarok (นั่นเป็นเพียงตัวอย่าง) มีสถานการณ์ใดบ้างที่ใช้เซิร์ฟเวอร์ฐานข้อมูลเปรียบเทียบกับฐานข้อมูลแบบฝังตัว

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

5
ใครบ้างที่รู้สึกว่าการแย่งชิงกันของ Scrum นั้นไม่คล่องตัว?
ฉันเป็นแฟนตัวยงของการพัฒนาที่คล่องตัวและใช้ XP ในโครงการที่ประสบความสำเร็จอย่างมากไม่กี่ปีที่ผ่านมา ฉันรักทุกอย่างเกี่ยวกับมันแนวทางการพัฒนาแบบวนซ้ำเขียนโค้ดเกี่ยวกับการทดสอบการเขียนโปรแกรมคู่การมีลูกค้าบนไซต์เพื่อดำเนินการต่างๆ มันเป็นสภาพแวดล้อมการทำงานที่มีประสิทธิผลสูงและฉันไม่เคยรู้สึกเหมือนถูกกดดัน อย่างไรก็ตามสถานที่ไม่กี่แห่งสุดท้ายที่ฉันใช้ Scrum ใช้แล้วใช้งานได้ ฉันรู้ว่ามันเป็นเด็กโปสเตอร์เพื่อการพัฒนาที่คล่องตัว แต่ฉันไม่เชื่อ 100% ว่าเป็นคนคล่องแคล่ว ด้านล่างนี้เป็นสาเหตุหลักสองข้อที่ทำให้ฉันไม่รู้สึกว่องไว ผู้จัดการโครงการรักมัน ผู้จัดการโครงการผู้ซึ่งหลงไหลตามกำหนดเวลาของพวกเขาดูเหมือนจะรักสกัล จากประสบการณ์ของฉันพวกเขาดูเหมือนจะใช้ Sprint Backlog เป็นเครื่องมือในการติดตามความต้องการของเวลาและเก็บบันทึกจำนวนเวลาที่ใช้ไปกับภารกิจที่กำหนด แทนที่จะใช้ไวท์บอร์ดพวกเขาทั้งหมดใช้แผ่น excel ซึ่งนักพัฒนาแต่ละคนจะต้องกรอกอย่างเคร่งครัด ในความคิดของฉันนี่เป็นวิธีการติดตามเอกสาร / เวลามากเกินไปสำหรับกระบวนการที่คล่องตัว เหตุใดฉันจึงต้องเสียเวลาในการประเมินว่างานจะใช้เวลานานแค่ไหนเมื่อฉันสามารถทำได้ด้วยตัวเอง หรือในทำนองเดียวกันว่าทำไมฉันถึงต้องเสียเวลาในการจัดทำเอกสารว่าต้องใช้เวลานานแค่ไหนเมื่อฉันสามารถย้ายไปยังงานต่อไปได้ การประชุมที่ยอดเยี่ยม การประชุมที่โดดเด่นในสถานที่ก่อนหน้านี้ที่ฉันทำงานนั้นเป็นฝันร้าย ทุกวันเราต้องอธิบายสิ่งที่เราทำเมื่อวานนี้และสิ่งที่เราจะทำในวันนั้น ถ้าเราไปในเวลา "ประเมิน" ของเราสำหรับงานผู้จัดการโครงการจะเตะเหม็นและอ้างอิง Sprint Backlog เป็นวิธีการแสดงความสามารถที่คุณไม่ได้ปฏิบัติตามระยะเวลา ตอนนี้ฉันเข้าใจความต้องการในการสื่อสาร แต่แน่นอนว่าการประชุมประจำวันควรมีความเบิกบานใจและมุ่งเน้นไปที่การแบ่งปันความรู้ ฉันไม่คิดว่ามันจะกลายเป็นสไตล์การทำการบ้านของคุณ แน่นอนว่าจุดของความคล่องตัวก็คือไทม์ไลน์เปลี่ยนไปพวกเขาไม่ควรถูกวางไว้ในหิน ข้อสรุป แนวคิดของความคล่องตัวคือการทำให้ซอฟต์แวร์ดีขึ้นโดยทำให้นักพัฒนาซอฟต์แวร์มีชีวิตที่ง่าย ดังนั้นในความคิดของฉันกระบวนการใด ๆ เปรียวที่ใช้โดยทีมงานควรเป็นผู้นำ ฉันไม่คิดว่าการมีผู้จัดการโครงการใช้กระบวนการที่พวกเขาระบุว่า "เปรียว" เพื่อติดตามโครงการมีส่วนเกี่ยวข้องกับการพัฒนาที่คล่องตัว คิดว่าทุกคน?
41 agile  scrum 

6
วิธีที่ถูกต้องในการทำงานกับนักออกแบบกราฟิกคืออะไร [ปิด]
เมื่อเร็ว ๆ นี้เราได้ทำงานร่วมกับนักออกแบบกราฟิก (จัดโดยลูกค้า) เพื่อจัดหาสกินสำหรับแอปพลิเคชัน Django + Bootstrap ที่เราสร้างขึ้น ผู้ออกแบบได้จัดเตรียมรูปภาพสแตติกของเลย์เอาต์ใหม่พร้อมกับเอกสารที่อธิบายถึงคุณลักษณะทางเทคนิคบางอย่าง (ขนาดตัวอักษรสีมิติต่างๆเป็นต้น) มันกลับกลายเป็นเสียเวลาอย่างไม่น่าเชื่อที่จะใช้สิ่งนี้ แม้ว่าไซต์ทั้งหมดจะเป็นหน้าแรกหน้าดัชนีและหน้ารายละเอียดครึ่งโหล แต่ฉันใช้เวลาอย่างน้อย 5 วันในการปรับใช้ CSS และ HTML การเปลี่ยนแปลง ดังนั้นฉันจะออกไปบนกิ่งไม้และเรียกสิ่งนี้ผิดวิธี วิธีการพื้นฐานของฉันคือ: เปรียบเทียบภาพนิ่งและการเรนเดอร์ปัจจุบันและสังเกตเห็นความแตกต่าง คาดเดาสิ่งที่การเปลี่ยนแปลงจะต้องมีใน CSS / HTML ทำการเปลี่ยนแปลงนั้น ไปที่ขั้นตอนที่ 1 ปัญหาเฉพาะบางอย่างคือฉันไม่เข้าใจว่าการออกแบบรวมการเปลี่ยนแปลงจาก 8 คอลัมน์เป็น 12 รูปภาพบางรูปที่ให้ในรูปแบบที่ไม่ถูกต้อง (.png's สามารถแสดงผลแตกต่างกันในเบราว์เซอร์ / แพลตฟอร์มที่แตกต่างกัน) CSS มวยปล้ำตามปกติเพื่อให้ได้การเรนเดอร์พิกเซลที่สมบูรณ์แบบเป็นต้นและบางครั้งฉันก็ต้องจัดเทมเพลต HTML ใหม่เพื่อให้ได้พฤติกรรมที่แน่นอน วิธีที่ถูกต้องคืออะไร?

7
ทำไมไม่ฝังสไตล์ / สคริปต์ใน HTML แทนที่จะเชื่อมโยง?
เราเชื่อมไฟล์ CSS และ JavaScript เข้าด้วยกันเพื่อลดจำนวนคำขอ HTTP ซึ่งช่วยเพิ่มประสิทธิภาพ ผลที่ได้คือ HTML ดังนี้ <link rel="stylesheet" href="all-my-css-0fn392nf.min.css"> <!-- later... --> <script src="all-my-js-0fn392nf.min.js"></script> หากเรามีตรรกะฝั่งเซิร์ฟเวอร์ / บิลด์เพื่อทำสิ่งนี้ให้กับเราทำไมไม่ลองอีกขั้นหนึ่งแล้วฝังสไตล์และสคริปต์ที่ต่อกันเหล่านั้นลงใน HTML <style>.all{width:100%;}.my{display:none;}.css{color:white;}</style> <!-- later... --> <script>var all, my, js;</script> นั่นเป็นคำขอ HTTP ที่น้อยลงสองคำขอ แต่ฉันไม่เคยเห็นเทคนิคนี้มาก่อน ทำไมจะไม่ล่ะ?

6
“ ฉัน”,“ เรา”, หรือไม่อยู่ในเอกสารรหัส
ฉันพบว่าตัวเองเขียน (หวังว่า) ความคิดเห็นที่เป็นประโยชน์ในรหัส (C ++) เอกสารประเภท: The reason we are doing this is... เหตุผลที่ฉันใช้ "พวกเรา" แทนที่จะเป็น "ฉัน" ก็เพราะฉันเขียนบทความเชิงวิชาการจำนวนมากซึ่งบ่อยครั้งที่ "เรา" ชอบ ดังนั้นนี่คือคำถาม มีเหตุผลที่ดีที่จะเลือกใช้รหัสอื่นในรหัสเอกสารหรือไม่: ใช้ "เรา":เหตุผลที่เราทำเช่นนี้คือ ... ใช้ "ฉัน":เหตุผลที่ฉันทำสิ่งนี้คือ ... ใช้ชื่อของฉัน:เหตุผล[my name]นี้คือ ... เสียงไม่โต้ตอบ:เหตุผลที่ทำเช่นนี้คือ ... ไม่:ทำอย่างนี้เพราะ ... ฉันเลือก # 1 เพราะฉันคุ้นเคยกับการเขียนด้วยวิธีนี้ แต่เอกสารไม่ใช่สำหรับนักเขียน แต่สำหรับผู้อ่านดังนั้นฉันจึงสงสัยว่าการเพิ่มชื่อนักพัฒนาซอฟต์แวร์นั้นมีประโยชน์หรือไม่ จะมีการเปลี่ยนแปลงเมื่อรักษารหัส

4
Rich Hickey หมายความว่าอย่างไรเมื่อเขาพูดว่า“ ความพิเศษเฉพาะทั้งหมดของอินเทอร์เฟซ / คลาส / ประเภท] ฆ่าการใช้ซ้ำของคุณ!”
ในคำปราศรัยการประชุม goto ในการประชุมระดมความคิดที่กระตุ้นความคิดของ " มูลค่าของคุณค่า " ในเวลา 29 นาทีที่เขาพูดถึงค่าใช้จ่ายในภาษาจาวาและทำให้คำสั่งเช่น เขาหมายถึงอะไร มันเป็นเรื่องจริงเหรอ? ในการค้นหาคำตอบของฉันฉันเจอ: หลักการของความรู้น้อยที่สุด AKA กฎหมายของ Demeterซึ่งสนับสนุนการเชื่อมต่อ API แบบสุญญากาศ Wikipedia ยังแสดงข้อเสียบางประการ วิกฤตเสื้อผ้าของ Kevlin Henney ซึ่งระบุว่าการใช้ไม่ใช่การใช้ซ้ำเป็นเป้าหมายที่เหมาะสม การพูดคุยเรื่อง " Stop Writing Classes " ของ Jack Diederich ซึ่งขัดแย้งกับเรื่องวิศวกรรมโดยทั่วไป เห็นได้ชัดว่าสิ่งใดที่เขียนไม่ดีพอจะไร้ประโยชน์ แต่อินเทอร์เฟซของ API ที่เขียนดีจะป้องกันไม่ให้ใช้รหัสนั้นได้อย่างไร มีตัวอย่างตลอดประวัติศาสตร์ของบางสิ่งบางอย่างที่ทำขึ้นเพื่อจุดประสงค์เดียวที่ถูกใช้เพื่อสิ่งอื่นมากกว่า แต่ในโลกของซอฟต์แวร์ถ้าคุณใช้บางอย่างเพื่อจุดประสงค์ที่ไม่ได้มีไว้สำหรับมันก็มักจะแตก ฉันกำลังมองหาหนึ่งตัวอย่างที่ดีของอินเทอร์เฟซที่ดีที่ป้องกันไม่ให้ใช้รหัสบางอย่างถูกต้อง มีอยู่จริงเหรอ? ฉันไม่สามารถจินตนาการได้

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