คำถามติดแท็ก design

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

16
เกือบเสร็จโครงการแล้ว แต่มีรหัสสปาเก็ตตี้ ฉันจะเขียนใหม่หรือพยายามส่งมันต่อไปหรือไม่? [ปิด]
ฉันเป็นนักพัฒนาเว็บมือใหม่ (มีประสบการณ์หนึ่งปี) สองสามสัปดาห์หลังจากเรียนจบฉันได้รับงานเพื่อสร้างเว็บแอปพลิเคชันสำหรับ บริษัท ที่เจ้าของเทคโนโลยีไม่มากนัก เขาคัดเลือกฉันเพื่อหลีกเลี่ยงการขโมยความคิดของเขาค่าใช้จ่ายในการพัฒนาสูงที่ บริษัท ให้บริการเรียกเก็บและมีใครบางคนที่อายุน้อยกว่าเขาสามารถไว้วางใจ onboard เพื่อรักษาโครงการในระยะยาว (ฉันมาถึงข้อสรุปเหล่านี้ด้วยตนเอง ) Cocky เมื่อฉันย้อนกลับไปตอนนั้นฉันได้รับอนุปริญญาด้านวิทยาศาสตร์คอมพิวเตอร์ ฉันกำลังโทรนัด หลังจากการวิจัยบางอย่างที่ฉันตัดสินบน PHP และเริ่มต้นด้วย PHP ธรรมดาไม่มีวัตถุเพียงรหัสขั้นตอนที่น่าเกลียด สองเดือนต่อมาทุกอย่างยุ่งเหยิงและมันยากที่จะก้าวหน้า แอปพลิเคชั่นเว็บมีขนาดใหญ่มาก ดังนั้นฉันตัดสินใจที่จะตรวจสอบกรอบ MVC ที่จะทำให้ชีวิตของฉันง่ายขึ้น นั่นคือสิ่งที่ฉันได้พบกับเด็กสุดเจ๋งในชุมชน PHP: Laravel ฉันชอบมากมันเรียนรู้ได้ง่ายและฉันก็เริ่มเขียนโค้ดทันที รหัสของฉันดูสะอาดและเป็นระเบียบมากขึ้น มันดูดีมาก แต่เว็บแอปพลิเคชั่นก็มีขนาดใหญ่อีกครั้ง บริษัท กดดันให้ฉันส่งเวอร์ชั่นแรกซึ่งพวกเขาต้องการปรับใช้อย่างชัดเจนและเริ่มมองหาลูกค้า เพราะ Laravel สนุกกับการทำงานมันทำให้ฉันจำได้ว่าทำไมฉันถึงเลือกอุตสาหกรรมนี้ตั้งแต่แรก - บางอย่างที่ฉันลืมไปแล้วในขณะที่ติดอยู่ในระบบการศึกษาที่ไม่ดี ดังนั้นฉันจึงเริ่มทำงานในโครงการเล็ก ๆ ในเวลากลางคืนอ่านเกี่ยวกับวิธีการและแนวปฏิบัติที่ดีที่สุด ฉันมาเยือน OOP, ย้ายไปออกแบบเชิงวัตถุและการวิเคราะห์และอ่านลุงบ๊อบหนังสือรหัสสะอาด สิ่งนี้ช่วยให้ฉันรู้ว่าฉันไม่รู้อะไรเลย ฉันไม่ทราบวิธีการสร้างซอฟต์แวร์ THE RIGHT WAY …

17
การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากฐานของความชั่วทั้งหมดหรือไม่?
เพื่อนร่วมงานของฉันในวันนี้มุ่งมั่นที่เรียกว่าคลาสThreadLocalFormatซึ่งโดยทั่วไปจะย้ายอินสแตนซ์ของคลาส Java Format ลงในเธรดโลคัลเนื่องจากพวกเขาไม่ได้เป็นเธรดที่ปลอดภัยและ "ค่อนข้างแพง" ในการสร้าง ฉันเขียนการทดสอบอย่างรวดเร็วและคำนวณว่าฉันสามารถสร้างอินสแตนซ์ 200,000 ครั้งต่อวินาทีถามเขาว่าเขาสร้างสิ่งนั้นมากมายซึ่งเขาตอบว่า เขาเป็นโปรแกรมเมอร์ที่ยอดเยี่ยมและทุกคนในทีมมีทักษะสูงดังนั้นเราจึงไม่มีปัญหาในการทำความเข้าใจโค้ดผลลัพธ์ แต่ก็ชัดเจนว่าเป็นกรณีของการปรับให้เหมาะสมเมื่อไม่มีความต้องการจริง เขาสำรองรหัสตามคำขอของฉัน คุณคิดอย่างไร? นี่เป็นกรณีของ "การเพิ่มประสิทธิภาพก่อนวัยอันควร" หรือไม่และจริง ๆ แล้วมันแย่ขนาดไหน?

18
หนึ่งจะจัดการ IF หลายพัน IF ... แล้ว ... กฎอื่น ๆ ได้อย่างไร
ฉันกำลังพิจารณาที่จะสร้างแอปพลิเคชั่นซึ่งที่หลักของมันจะประกอบไปด้วยหาก ... แล้ว ... งบอื่น วัตถุประสงค์ของแอปพลิเคชั่นนี้คือเพื่อให้สามารถทำนายได้ว่าวัวเคลื่อนไปรอบ ๆ ในแนวนอนใด พวกเขาได้รับผลกระทบจากสิ่งต่าง ๆ เช่นดวงอาทิตย์ลมแหล่งอาหารเหตุการณ์ฉับพลัน ฯลฯ แอปพลิเคชันดังกล่าวสามารถจัดการได้อย่างไร? ฉันจินตนาการว่าหลังจากสองสามร้อยประโยค IF มันจะดีเท่าที่คาดเดาไม่ได้ว่าโปรแกรมจะตอบสนองและดีบั๊กอะไรที่นำไปสู่ปฏิกิริยาบางอย่างจะหมายความว่าเราจะต้องสำรวจต้นไม้คำสั่ง IF ทั้งหมดทุกครั้ง ฉันได้อ่านนิดหน่อยเกี่ยวกับเอ็นจิ้นกฎ แต่ฉันไม่เห็นว่าพวกเขาจะรับมือกับความซับซ้อนนี้ได้อย่างไร

15
การใช้พารามิเตอร์บูลีนเป็นสิ่งผิดปกติหรือไม่
ฉันได้เห็นการฝึกฝนเป็นครั้งคราวว่า "รู้สึก" ผิด แต่ฉันไม่สามารถพูดได้ชัดเจนว่ามีอะไรผิดปกติ หรืออาจเป็นเพียงความอคติของฉัน ไปที่นี่: นักพัฒนากำหนดวิธีการด้วยบูลีนเป็นหนึ่งในพารามิเตอร์ของมันและวิธีการที่เรียกว่าอื่นและอื่น ๆ และในที่สุดก็ใช้บูลีนเพียงเพื่อตรวจสอบว่าจะดำเนินการบางอย่างหรือไม่ ตัวอย่างนี้อาจใช้เพื่อให้การดำเนินการเฉพาะในกรณีที่ผู้ใช้มีสิทธิ์บางอย่างหรือบางทีถ้าเรา (หรือไม่) ในโหมดทดสอบหรือโหมดแบทช์หรือโหมดสดหรืออาจเฉพาะเมื่อระบบอยู่ใน บางรัฐ มีวิธีการทำอยู่เสมอไม่ว่าจะโดยการสอบถามเมื่อถึงเวลาที่ต้องดำเนินการ (แทนที่จะส่งผ่านพารามิเตอร์) หรือโดยมีวิธีการหลายเวอร์ชันหรือการใช้งานหลายระดับของชั้นเรียน ฯลฯ คำถามของฉันไม่ได้ มีวิธีการปรับปรุงสิ่งนี้มากน้อยเพียงใด แต่ไม่ว่ามันจะผิดหรือเปล่า (อย่างที่ฉันสงสัย) และถ้าเป็นเช่นนั้น

17
เป็นการดีที่จะมีคีย์หลักจำนวนเต็ม autoincrement เสมอหรือไม่
ในฐานข้อมูลของฉันฉันมักจะติดนิสัยที่จะมีคีย์หลักจำนวนเต็มที่เพิ่มขึ้นอัตโนมัติพร้อมชื่อidสำหรับทุกตารางที่ฉันทำเพื่อที่ฉันจะได้ค้นหาที่ไม่ซ้ำสำหรับแถวใดแถวหนึ่ง นี่ถือว่าเป็นความคิดที่ไม่ดีหรือไม่? มีข้อเสียใด ๆ ในการทำเช่นนี้? บางครั้งฉันก็มีดัชนีหลายอย่างเช่นid, profile_id, subscriptionsที่idเป็นตัวระบุเฉพาะการprofile_idเชื่อมโยงไปยังต่างประเทศidของProfileตาราง ฯลฯ หรือมีสถานการณ์ที่คุณไม่ต้องการเพิ่มเขตข้อมูลดังกล่าวหรือไม่

5
อะไรคือนิสัยที่ดีในการออกแบบอาร์กิวเมนต์บรรทัดคำสั่ง
ขณะพัฒนาแอปพลิเคชันฉันเริ่มสงสัย - ฉันควรออกแบบอาร์กิวเมนต์บรรทัดคำสั่งได้อย่างไร จำนวนมากของโปรแกรมที่ใช้สูตรเช่นนี้หรือ-argument value วิธีการแก้ปัญหาที่เข้ามาอยู่ในใจของผมก็คือ/argument value argument:valueฉันคิดว่ามันดีเพราะไม่มีช่องว่างสีขาวไม่มีทางที่ค่าและการขัดแย้งสามารถทำให้ยุ่งเหยิงได้ นอกจากนี้ยังเป็นการง่ายที่จะแยกสตริงออกเป็นสอง:อักขระจากอักขระตัวแรกทางซ้าย คำถามของฉันคือ: -argument valueสูตรยอดนิยมนั้นดีกว่าargument:value(อ่านง่ายขึ้นเขียนง่ายขึ้นไร้ข้อผิดพลาดเข้าใจง่ายขึ้นโดยนักพัฒนาผู้เชี่ยวชาญ) หรือไม่ มีกฎที่รู้จักกันทั่วไปซึ่งฉันควรปฏิบัติตามในขณะที่ออกแบบอาร์กิวเมนต์บรรทัดคำสั่ง (นอกเหนือจากถ้ามันทำงานมันเป็น OK)? ขอรายละเอียดเพิ่มเติมฉันจะให้มัน อย่างไรก็ตามฉันคิดว่าพวกเขาไม่ควรส่งผลกระทบต่อคำตอบ คำถามเกี่ยวกับนิสัยที่ดีโดยทั่วไป ฉันคิดว่ามันเหมือนกันสำหรับแอปพลิเคชันทุกประเภท เรากำลังทำงานกับแอปพลิเคชั่นที่จะใช้ในสถานที่สาธารณะ (touch totems, table) แอปพลิเคชันเขียนโดยใช้ Qt Quick 5 (C ++, QML, JS) อุปกรณ์จะติดตั้ง Windows 8.1 / 10 เราจะให้ส่วนต่อประสานส่วนหน้าเพื่อจัดการอุปกรณ์ อย่างไรก็ตามผู้ดูแลระบบขั้นสูงบางรายอาจต้องการกำหนดค่าแอปพลิเคชันด้วยตนเอง มันไม่สำคัญมากนักจากธุรกิจ แต่เป็นเพราะฉันเห็นด้วยกับสิ่งที่Kilian Fothบอกว่าฉันไม่ต้องการให้ใบสมัครของฉันเจ็บปวดสำหรับผู้ใช้ ไม่พบในอินเทอร์เน็ตสิ่งที่ฉันต้องการฉันถามที่นี่ สำหรับผู้ใช้ Stack Exchange ขั้นสูง: ฉันต้องการให้คำถามนี้เป็นเรื่องทั่วไป บางทีอาจมีคุณสมบัติเป็น wiki …
190 design  parameters  cli 

5
คุณจะใช้ struct เมื่อใดแทนคลาส? [ปิด]
อะไรคือกฎของหัวแม่มือสำหรับเมื่อคุณใช้ structs กับคลาส? ฉันกำลังคิดถึงนิยาม C # ของคำศัพท์เหล่านั้น แต่หากภาษาของคุณมีแนวคิดที่คล้ายกันฉันต้องการฟังความคิดเห็นของคุณเช่นกัน ฉันมักจะใช้คลาสสำหรับเกือบทุกอย่างและใช้ structs เฉพาะเมื่อสิ่งที่ง่ายมากและควรเป็นประเภทค่าเช่น PhoneNumber หรืออะไรทำนองนั้น แต่ดูเหมือนว่าเป็นการใช้งานที่ค่อนข้างน้อยและฉันหวังว่าจะมีกรณีการใช้งานที่น่าสนใจมากกว่านี้
174 c#  design  class  struct 

21
โปรแกรมเมอร์ที่รวดเร็วและสกปรกรู้ได้อย่างไรว่าพวกมันถูกต้อง?
ถ้าคุณถามโปรแกรมเมอร์ว่าทำไมพวกเขาถึงควรเขียนโค้ดสะอาดคำตอบที่คุณได้รับอันดับหนึ่งคือความสามารถในการบำรุงรักษา ในขณะที่อยู่ในรายการของฉันเหตุผลหลักของฉันคือทันทีและเห็นแก่ผู้อื่นน้อยกว่า: ฉันไม่สามารถบอกได้ว่ารหัสใหม่ของฉันถูกต้องถ้ามันสกปรกเกินไป ฉันพบว่าฉันได้มุ่งเน้นไปที่ฟังก์ชั่นของแต่ละบุคคลและบรรทัดของรหัสมากจนเมื่อฉันเสร็จร่างฉบับแรกของฉันและย้อนกลับไปดูภาพใหญ่อีกครั้งบางครั้งมันก็ไม่เข้ากันอย่างเรียบร้อยมาก การใช้เวลาหนึ่งชั่วโมงหรือสองครั้งในการทำความสะอาดเพื่อทำความสะอาดบ่อยครั้งจะทำให้เกิดข้อผิดพลาดในการคัดลอก / วางหรือเงื่อนไขขอบเขตที่ยากต่อการตรวจจับในแบบร่างคร่าวๆ อย่างไรก็ตามบางคนรู้สึกว่าบางครั้งมันก็โอเคที่จะตรวจสอบรหัสสกปรกในความสนใจของซอฟต์แวร์การจัดส่งโดยเจตนาโดยมีแผนที่จะ "ล้างข้อมูลในภายหลัง" มีเทคนิคบางอย่างที่ปฏิบัติได้ซึ่งทำให้พวกเขามั่นใจในความถูกต้องของรหัสของพวกเขาเมื่ออ่านง่ายกว่าอุดมคติหรือไม่? มันเป็นทักษะที่ควรค่าแก่การพยายามพัฒนาหรือไม่? หรือการขาดความเชื่อมั่นในรหัสบางสิ่งบางคนแค่หาง่ายกว่าที่จะยอมรับ?
166 design 

8
การเขียนโปรแกรมที่ไม่ดีเป็นเรื่องปกติในอุตสาหกรรมซอฟต์แวร์หรือไม่? [ปิด]
ฉันเพิ่งเริ่มงานแรกในฐานะนักพัฒนาซอฟต์แวร์เมื่อหนึ่งเดือนก่อน ทุกอย่างที่ฉันได้เรียนรู้เกี่ยวกับ OOP, SOLID , แห้ง , YAGNI, รูปแบบการออกแบบ, SRP , ฯลฯ สามารถถูกโยนออกไปนอกหน้าต่าง พวกเขาใช้เว็บฟอร์ม C # .NET และทำเกือบทุกอย่างภายใน Code Behind ด้วยคลาสภายนอกน้อยมากซึ่งไม่ได้เรียกว่าออบเจ็กต์ พวกเขาใช้การควบคุมที่กำหนดเองและนำมาใช้ใหม่ เกี่ยวกับวัตถุเท่านั้นที่ใช้โดยEntity Framework พวกเขาใช้ Code Behinds ซ้ำสำหรับลูกค้าแต่ละราย พวกเขามีวิธีการที่ยาว 400 บรรทัดในการทำสิ่งของทุกประเภท สำหรับลูกค้าใหม่พวกเขาใช้ aspx และ aspx.cs และดึงรหัสลูกค้าออกและเริ่มเพิ่มรหัสเฉพาะลูกค้าใหม่ ข้อแก้ตัวแรกของพวกเขาคือมันจะเพิ่มการบำรุงรักษาเพิ่มเติมและรหัสเพิ่มเติมคือการบำรุงรักษาเพิ่มเติม มันเป็นร้านค้าเล็ก ๆ ของนักพัฒนาสามคนรวมถึงตัวฉันด้วย นักพัฒนาซอฟต์แวร์หนึ่งคนมีประสบการณ์มากกว่า 30 ปีและอีกหนึ่งคนมีประสบการณ์มากกว่า 20 ปี หนึ่งเคยเป็นนักพัฒนาเกมและคนอื่น ๆ ได้ทำงานใน C และ …

8
ฉันจะทำให้คนหยุดการขับรถมอเตอร์ไซค์ (เน้นเรื่องเล็ก ๆ น้อย ๆ ) ได้อย่างไร?
ฉันได้รับมอบหมายให้สอน codebase ใหม่ให้กับทีมอื่น แต่ฉันก็ยังประสบปัญหาอยู่ เมื่อใดก็ตามที่ฉันไปจริงเดินผ่านรหัสกับคนที่เราไม่ได้ไกลมากก่อนที่จะออกกำลังกายทั้ง devolves เป็นbikeshedding (สมาชิกขององค์กรที่ให้น้ำหนักสัดส่วนกับปัญหาเล็ก ๆ น้อย ๆ ) การออกกำลังกาย เนื่องจากพวกเขาไม่รู้จัก codebase แต่คิดว่าพวกเขาต้องการช่วยปรับปรุงพวกเขาจึงมุ่งเน้นไปที่สิ่งที่พวกเขาสามารถเข้าใจได้: Why is that named that? (2 นาทีเพื่ออธิบายสาเหตุที่ตั้งชื่อนั้นใหม่ 10 นาทีอภิปรายชื่อใหม่) Why is that an abstract base class rather than an interface? (เพื่ออธิบาย 2 นาที, 10+ นาทีอภิปรายถึงข้อดีของการตัดสินใจนี้) ... และต่อไป ตอนนี้ไม่ได้รับฉันผิด - ชื่อที่ดีและดีการออกแบบที่สอดคล้องกันมีความสำคัญ แต่เราไม่เคยได้พูดคุยเกี่ยวกับสิ่งที่รหัสจริงไม่หรือวิธีการที่ระบบการออกแบบในลักษณะที่มีความหมายใด ๆ ฉันได้ทำผู้ตัดสินการประชุมเพื่อให้ผู้คนหลุดพ้นจากการเสียสละเหล่านี้ แต่พวกเขาหายไป …

7
การค้นหาเหมาะสมกับอินเทอร์เฟซ RESTful อย่างไร
เมื่อออกแบบอินเตอร์เฟส RESTful ซีแมนทิกส์ของประเภทคำขอจะถือว่ามีความสำคัญต่อการออกแบบ GET - รายการคอลเลกชันหรือดึงองค์ประกอบ PUT - แทนที่คอลเลกชันหรือองค์ประกอบ POST - สร้างคอลเล็กชันหรือองค์ประกอบ DELETE - เอออืมลบคอลเลกชันหรือองค์ประกอบ อย่างไรก็ตามสิ่งนี้ดูเหมือนจะไม่ครอบคลุมแนวคิดของ "การค้นหา" เช่นในการออกแบบชุดบริการเว็บที่สนับสนุนไซต์หางานคุณอาจมีข้อกำหนดต่อไปนี้: รับโฆษณางานบุคคล รับไปdomain/Job/{id}/ สร้างงานโฆษณา โพสต์ถึงdomain/Job/ อัปเดตงานโฆษณา ใส่ลงไปdomain/Job/ ลบโฆษณางาน ลบไปที่domain/Job/ "รับงานทั้งหมด" ก็ง่าย: รับไปdomain/Jobs/ อย่างไรก็ตามงาน "การค้นหา" ตกอยู่ในโครงสร้างนี้อย่างไร คุณสามารถอ้างว่าเป็น "รูปแบบรายการ" และใช้เป็น: รับไปdomain/Jobs/ อย่างไรก็ตามการค้นหาอาจซับซ้อนและเป็นไปได้ทั้งหมดในการสร้างการค้นหาที่สร้างสตริง GET ที่ยาว นั่นคือการอ้างอิงคำถาม SO ที่นี่มีปัญหาในการใช้สตริง GET ที่มีความยาวมากกว่า 2000 ตัวอักษร ตัวอย่างอาจอยู่ในการค้นหาแบบเหลี่ยมเพชรพลอย - ดำเนินการต่อตัวอย่าง "job" …

17
ฉันจะรู้ได้อย่างไรว่าวิธีการของฉันควรใช้ซ้ำได้อย่างไร [ปิด]
ฉันกำลังคิดถึงธุรกิจของตัวเองที่บ้านและภรรยาของฉันมาหาฉันและพูดว่า ที่รัก .. คุณสามารถพิมพ์ Day Light Saving ทั่วโลกสำหรับปี 2018 ในคอนโซลได้หรือไม่? ฉันต้องตรวจสอบบางอย่าง และฉันก็มีความสุขสุด ๆ เพราะนั่นคือสิ่งที่ฉันรอมาตลอดทั้งชีวิตกับประสบการณ์ Java ของฉันและเกิดขึ้นกับ: import java.time.*; import java.util.Set; class App { void dayLightSavings() { final Set<String> availableZoneIds = ZoneId.getAvailableZoneIds(); availableZoneIds.forEach( zoneId -> { LocalDateTime dateTime = LocalDateTime.of( LocalDate.of(2018, 1, 1), LocalTime.of(0, 0, 0) ); ZonedDateTime now = ZonedDateTime.of(dateTime, …

10
นี่เป็นการละเมิดหลักการทดแทน Liskov หรือไม่?
สมมติว่าเรามีรายการของเอนทิตีงานและProjectTaskประเภทย่อย สามารถปิดงานได้ตลอดเวลายกเว้นงานProjectTasksที่ไม่สามารถปิดได้เมื่อพวกเขามีสถานะเป็นเริ่มต้น UI ควรตรวจสอบให้แน่ใจว่าไม่มีตัวเลือกในการปิดการเริ่มต้นทำงานProjectTaskแต่มีการป้องกันบางอย่างในโดเมน: public class Task { public Status Status { get; set; } public virtual void Close() { Status = Status.Closed; } } public class ProjectTask : Task { public override void Close() { if (Status == Status.Started) throw new Exception("Cannot close a started Project Task"); base.Close(); } …

14
ความยาวในอุดมคติของวิธีการสำหรับคุณคืออะไร? [ปิด]
ในการเขียนโปรแกรมเชิงวัตถุแน่นอนว่าไม่มีกฎที่แน่นอนเกี่ยวกับความยาวสูงสุดของวิธีการ แต่ฉันก็ยังพบว่าคำพูดสองคำนี้ขัดแย้งกันดังนั้นฉันอยากได้ยินสิ่งที่คุณคิด ในรหัสที่สะอาด: คู่มือของงานฝีมือซอฟต์แวร์เปรียว Robert Martin กล่าวว่า: กฎข้อแรกของฟังก์ชั่นคือมันควรมีขนาดเล็ก กฎข้อที่สองของฟังก์ชั่นคือควรมีขนาดเล็กกว่านั้น ฟังก์ชั่นไม่ควรยาว 100 บรรทัด ฟังก์ชั่นแทบจะไม่เคยมีความยาว 20 บรรทัด และเขายกตัวอย่างจากโค้ด Java ที่เขาเห็นจาก Kent Beck: ทุกฟังก์ชั่นในโปรแกรมของเขามีความยาวเพียงสองหรือสามหรือสี่บรรทัด แต่ละคนเห็นได้อย่างชัดเจน แต่ละคนเล่าเรื่อง และแต่ละคนก็นำคุณไปสู่ลำดับต่อไปที่น่าสนใจ นั่นเป็นสิ่งที่ฟังก์ชั่นของคุณควรสั้นลง! สิ่งนี้ฟังดูยอดเยี่ยม แต่ในทางกลับกันในCode Complete Steve McConnell พูดอะไรบางอย่างที่แตกต่างกันมาก: รูทีนควรได้รับอนุญาตให้เติบโตอย่างเป็นธรรมชาติถึง 100-200 บรรทัดหลักฐานหลายทศวรรษบอกว่ากิจวัตรที่มีความยาวดังกล่าวไม่มีข้อผิดพลาดเกิดขึ้นได้ง่าย และเขาให้การอ้างอิงถึงการศึกษาที่ระบุว่ากิจวัตร 65 บรรทัดหรือยาวกว่านั้นถูกกว่าเพื่อพัฒนา ดังนั้นในขณะที่มีการแยกความคิดเห็นเกี่ยวกับเรื่องนี้มีวิธีปฏิบัติที่ดีที่สุดสำหรับคุณหรือไม่?

11
วิธีการที่ทันสมัยในการจัดการข้อผิดพลาด ...
ฉันไตร่ตรองปัญหานี้มาระยะหนึ่งแล้วและพบว่าตัวเองกำลังค้นหาคำเตือนและความขัดแย้งอยู่เรื่อย ๆ ดังนั้นฉันจึงหวังว่าจะมีคนสรุปผลได้ดังต่อไปนี้: ชอบข้อยกเว้นเกี่ยวกับรหัสข้อผิดพลาด เท่าที่ฉันทราบจากการทำงานในอุตสาหกรรมเป็นเวลาสี่ปีการอ่านหนังสือและบล็อก ฯลฯ แนวทางปฏิบัติที่ดีที่สุดในปัจจุบันสำหรับการจัดการข้อผิดพลาดคือการโยนข้อยกเว้นแทนที่จะส่งคืนรหัสข้อผิดพลาด (ไม่จำเป็นต้องเป็นรหัสข้อผิดพลาด แต่ ประเภทที่แสดงถึงข้อผิดพลาด) แต่สำหรับฉันนี่ดูเหมือนจะขัดแย้ง ... การเข้ารหัสไปยังอินเตอร์เฟสไม่ใช่การนำไปใช้งาน เราใช้รหัสในส่วนต่อประสานหรือบทคัดย่อเพื่อลดการแต่งงาน เราไม่ทราบหรือต้องการทราบประเภทและการนำไปใช้งานของอินเทอร์เฟซที่เฉพาะเจาะจง แล้วเราจะรู้ได้อย่างไรว่ามีข้อยกเว้นอะไรบ้างที่เราควรจับตา? การใช้งานอาจมีข้อยกเว้นแตกต่างกัน 10 ข้อหรือไม่สามารถทิ้งได้ เมื่อเราได้รับการยกเว้นแน่นอนว่าเรากำลังตั้งสมมติฐานเกี่ยวกับการนำไปปฏิบัติ เว้นแต่ - ส่วนต่อประสานมี ... ข้อกำหนดข้อยกเว้น บางภาษาอนุญาตให้นักพัฒนาระบุว่าวิธีการบางอย่างมีข้อยกเว้นบางอย่าง (เช่น Java ใช้throwsคำหลัก) จากมุมมองของรหัสการโทรสิ่งนี้ดูดี - เรารู้อย่างชัดเจนว่าข้อยกเว้นใดที่เราอาจต้องตรวจจับ แต่ - ดูเหมือนว่าจะแนะนำ ... นามธรรมรั่วไหล ทำไมอินเตอร์เฟสควรระบุข้อยกเว้นที่สามารถส่งออกได้ จะเกิดอะไรขึ้นถ้าการนำไปปฏิบัติไม่จำเป็นต้องมีข้อยกเว้นหรือต้องการโยนข้อยกเว้นอื่น ๆ ไม่มีทางที่ระดับอินเตอร์เฟสจะทราบว่ามีข้อยกเว้นใดที่การนำไปปฏิบัติอาจต้องการทิ้ง ดังนั้น... สรุป เหตุใดจึงมีข้อยกเว้นที่ต้องการเมื่อพวกเขา (ในสายตาของฉัน) ขัดแย้งกับแนวทางปฏิบัติที่ดีที่สุดของซอฟต์แวร์ และหากรหัสข้อผิดพลาดแย่มาก (และฉันไม่จำเป็นต้องขายในข้อผิดพลาดของรหัสข้อผิดพลาด) จะมีทางเลือกอื่นหรือไม่ ปัจจุบัน …

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