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

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

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

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

8
นักพัฒนาควรทำเลียนแบบ UI หากไม่มีผู้ออกแบบในโครงการหรือไม่
ฉันทำงานกับทีมเล็ก ๆ ที่สร้างเว็บแอปพลิเคชั่นที่เป็นกรรมสิทธิ์และ UX ไม่ได้ให้ความสำคัญมากนักเพราะคนของเราจะเป็นคนที่ทำงานอยู่ แต่เราพยายามทำให้งานของพวกเขาง่ายขึ้น ในฐานะนักพัฒนาฉันควรสร้างการจำลองแบบ UI ก่อนที่ฉันจะเริ่มสร้างหน้าจอใหม่หรือไม่ ไม่มีอะไรแฟนซีเกินไปส่วนใหญ่เป็นเค้าโครงทั่วไปเพื่อพูดคุยกับเพื่อนร่วมงานและมีแบบจำลองอ้างอิง ฉันเปรียบเทียบกับการสร้างไดอะแกรม UML ก่อนที่จะทำการเขียนโค้ดแบบสุ่มสี่สุ่มห้า เพื่อนร่วมงานคนหนึ่งของฉันบอกว่าสิ่งนี้น่ารังเกียจและไม่ใช่หน้าที่ของฉันที่จะทำเช่นนั้น

12
การจับข้อยกเว้นทั่วไปเป็นสิ่งที่ไม่ดีจริง ๆ หรือ
ฉันมักจะเห็นด้วยกับคำเตือนการวิเคราะห์รหัสส่วนใหญ่และฉันพยายามที่จะปฏิบัติตามพวกเขา อย่างไรก็ตามฉันมีเวลายากขึ้นกับสิ่งนี้: CA1031: อย่าตรวจจับชนิดข้อยกเว้นทั่วไป ฉันเข้าใจเหตุผลของกฎนี้ แต่ในทางปฏิบัติถ้าฉันต้องการที่จะทำสิ่งเดียวกันโดยไม่คำนึงถึงข้อยกเว้นที่ถูกโยนออกไปทำไมฉันต้องจัดการแต่ละอย่างโดยเฉพาะ? นอกจากนี้หากฉันจัดการข้อยกเว้นเฉพาะจะเกิดอะไรขึ้นถ้ารหัสที่ฉันเรียกจะเปลี่ยนแปลงเพื่อให้เกิดข้อยกเว้นใหม่ในอนาคต ตอนนี้ฉันต้องเปลี่ยนรหัสเพื่อจัดการข้อยกเว้นใหม่นั้น ในขณะที่ถ้าฉันเพียงแค่จับExceptionรหัสของฉันไม่ต้องเปลี่ยน ตัวอย่างเช่นถ้า Foo เรียกบาร์และ Foo จำเป็นต้องหยุดการประมวลผลโดยไม่คำนึงถึงประเภทของข้อยกเว้นที่เกิดจาก Bar มีข้อได้เปรียบอะไรบ้างในการระบุประเภทของข้อยกเว้นที่ฉันจับได้ อาจเป็นตัวอย่างที่ดีกว่า: public void Foo() { // Some logic here. LogUtility.Log("some message"); } public static void Log() { try { // Actual logging here. } catch (Exception ex) { // Eat it. Logging failures shouldn't …
56 c#  design  exceptions 

10
ในกรณีใดรหัสน้อยไม่ดีขึ้น? [ปิด]
ฉันเพิ่งปรับปรุงรหัสบางส่วนในที่ทำงานเมื่อเร็ว ๆ นี้และฉันคิดว่าฉันทำงานได้ดี ฉันลดโค้ด 980 บรรทัดไปที่ 450 และลดจำนวนคลาสลงครึ่งหนึ่ง เมื่อแสดงสิ่งนี้ต่อเพื่อนร่วมงานของฉันบางคนไม่เห็นด้วยว่านี่เป็นการปรับปรุง พวกเขากล่าวว่า - "บรรทัดที่น้อยกว่าของรหัสไม่จำเป็นต้องดีกว่า" ฉันสามารถเห็นได้ว่าอาจมีกรณีร้ายแรงที่ผู้คนเขียนเส้นยาวจริง ๆ และ / หรือใส่ทุกอย่างในวิธีการเดียวเพื่อบันทึกสองสามบรรทัด แต่นั่นไม่ใช่สิ่งที่ฉันทำ รหัสในความคิดของฉันมีโครงสร้างที่ดีและง่ายต่อการเข้าใจ / บำรุงรักษาเนื่องจากมันมีขนาดเพียงครึ่งเดียว ฉันกำลังดิ้นรนเพื่อดูว่าทำไมทุกคนต้องการทำงานกับรหัสสองเท่าที่จำเป็นสำหรับการทำงานให้เสร็จและฉันสงสัยว่าถ้าใครรู้สึกเหมือนเพื่อนร่วมงานของฉันและสามารถสร้างกรณีที่ดีสำหรับการมีรหัสมากกว่า ?

6
การวนรอบเหตุการณ์เป็นเพียงการวนรอบ / ขณะที่การหยั่งสัญญาณที่ปรับปรุงแล้ว
ฉันพยายามเข้าใจว่าวงเหตุการณ์คืออะไร บ่อยครั้งที่คำอธิบายคือในเหตุการณ์วนรอบคุณทำบางสิ่งบางอย่างจนกว่าคุณจะได้รับแจ้งว่ามีเหตุการณ์เกิดขึ้น จากนั้นคุณจัดการกับกิจกรรมและทำสิ่งที่คุณเคยทำมาก่อน เพื่อแมปคำจำกัดความข้างต้นด้วยตัวอย่าง ฉันมีเซิร์ฟเวอร์ที่ 'คอยฟัง' ในเหตุการณ์ลูปและเมื่อตรวจพบการเชื่อมต่อซ็อกเก็ตข้อมูลจากมันจะถูกอ่านและแสดงหลังจากนั้นเซิร์ฟเวอร์จะกลับมาทำงาน / เริ่มฟังเหมือนเดิม อย่างไรก็ตามเหตุการณ์นี้เกิดขึ้นและพวกเราได้รับแจ้งว่า 'แบบนั้น' นั้นเป็นเรื่องที่ฉันต้องรับมือ คุณสามารถพูดได้ว่า: "ไม่ใช่" แบบนั้น "คุณต้องลงทะเบียนผู้ฟังเหตุการณ์" แต่สิ่งที่ฟังเหตุการณ์ แต่ฟังก์ชั่นที่ด้วยเหตุผลบางอย่างจะไม่กลับมา มันอยู่ในวงของตัวเองกำลังรอการแจ้งเตือนเมื่อมีเหตุการณ์เกิดขึ้น? ผู้ฟังเหตุการณ์ควรลงทะเบียนผู้ฟังเหตุการณ์ด้วยหรือไม่ มันจะจบที่ไหน? เหตุการณ์เป็นสิ่งที่เป็นนามธรรมที่ดีในการทำงานด้วย แต่เป็นเพียงสิ่งที่เป็นนามธรรม ฉันเชื่อว่าในท้ายที่สุดการเลือกตั้งไม่สามารถหลีกเลี่ยงได้ บางทีเราไม่ได้ทำมันในรหัสของเรา แต่ระดับที่ต่ำกว่า (การใช้ภาษาการเขียนโปรแกรมหรือระบบปฏิบัติการ) กำลังทำเพื่อเรา โดยทั่วไปแล้วจะมากับรหัสเทียมต่อไปนี้ซึ่งทำงานอยู่ในระดับต่ำพอจึงไม่ทำให้เกิดการรอคอย: while(True): do stuff check if event has happened (poll) do other stuff นี่คือความเข้าใจของฉันของความคิดทั้งหมดและฉันต้องการที่จะได้ยินว่ามันถูกต้อง ฉันเปิดกว้างในการยอมรับว่าความคิดทั้งหมดนั้นผิดอย่างสิ้นเชิงซึ่งในกรณีนี้ฉันต้องการคำอธิบายที่ถูกต้อง

10
“ ผู้ใช้ไม่ควรตัดสินใจว่าเป็นผู้ดูแลหรือไม่ ควรมีสิทธิ์หรือระบบรักษาความปลอดภัย”
ตัวอย่างที่ใช้ในคำถามผ่านข้อมูลขั้นต่ำเปลือยไปยังฟังก์ชั่นสัมผัสกับวิธีที่ดีที่สุดเพื่อตรวจสอบว่าผู้ใช้เป็นผู้ดูแลหรือไม่ หนึ่งคำตอบทั่วไปคือ: user.isAdmin() สิ่งนี้กระตุ้นให้เกิดความคิดเห็นซึ่งซ้ำหลายครั้งและได้รับการโหวตหลายครั้ง: ผู้ใช้ไม่ควรตัดสินใจว่าเป็นผู้ดูแลระบบหรือไม่ สิทธิพิเศษหรือระบบความปลอดภัยควร สิ่งที่อยู่คู่กับชั้นเรียนแน่นไม่ได้หมายความว่าเป็นความคิดที่ดีที่จะทำให้มันเป็นส่วนหนึ่งของชั้นเรียนนั้น ฉันตอบ ผู้ใช้ไม่ได้ตัดสินใจอะไร วัตถุผู้ใช้ / ตารางเก็บข้อมูลเกี่ยวกับผู้ใช้แต่ละคน ผู้ใช้จริงไม่ได้เปลี่ยนทุกอย่างเกี่ยวกับตัวเอง แต่นี่ไม่ได้ผล เห็นได้ชัดว่ามีความแตกต่างพื้นฐานของมุมมองซึ่งทำให้การสื่อสารเป็นเรื่องยาก มีคนอธิบายให้ฉันฟังได้ไหมว่าทำไม user.isAdmin () ไม่ดีและวาดภาพร่างสั้น ๆ ของสิ่งที่ดูเหมือน "ถูกต้อง" จริงๆฉันไม่เห็นข้อดีของการแยกการรักษาความปลอดภัยจากระบบที่ปกป้อง ข้อความความปลอดภัยใด ๆ จะกล่าวว่าความปลอดภัยต้องได้รับการออกแบบเข้าสู่ระบบตั้งแต่เริ่มต้นและพิจารณาในทุกขั้นตอนของการพัฒนาการปรับใช้การบำรุงรักษาและแม้กระทั่งจุดสิ้นสุดของชีวิต ไม่ใช่สิ่งที่สามารถยึดติดกับด้านข้างได้ แต่ 17 คะแนนขึ้นไปจนถึงความคิดเห็นนี้บอกว่าฉันไม่มีอะไรสำคัญ

13
วิธีหยุดการสูญเสียเวลาในการออกแบบส่วนประกอบ
ฉันเพิ่งจบการศึกษาจากมหาวิทยาลัยและเริ่มทำงานเป็นโปรแกรมเมอร์ ฉันไม่พบว่ามันยากที่จะแก้ปัญหา "ทางเทคนิค" หรือทำการดีบั๊กกับสิ่งที่ฉันจะบอกว่ามีวิธีแก้ปัญหา 1 ข้อ แต่ดูเหมือนจะมีปัญหาหลายอย่างที่ไม่มีวิธีแก้ปัญหาที่ชัดเจน - สิ่งต่าง ๆ เช่นสถาปัตยกรรมซอฟต์แวร์ สิ่งเหล่านี้ทำให้ฉันงงงวยและทำให้ฉันเป็นทุกข์มาก ฉันใช้เวลาหลายชั่วโมงพยายามตัดสินใจว่าจะ "ออกแบบ" โปรแกรมและระบบของฉันอย่างไร ตัวอย่างเช่น - ฉันจะแบ่งตรรกะนี้เป็นคลาส 1 หรือ 2 ฉันจะตั้งชื่อชั้นเรียนได้อย่างไรฉันควรตั้งให้เป็นส่วนตัวหรือสาธารณะเป็นต้นคำถามประเภทนี้ใช้เวลานานมากและทำให้ฉันหงุดหงิดอย่างมาก ฉันแค่ต้องการสร้างโปรแกรม - สถาปัตยกรรมถูกสาป ฉันจะผ่านช่วงสถาปัตยกรรมได้เร็วขึ้นและเข้าสู่ช่วงการเข้ารหัสและการดีบักที่ฉันชอบได้อย่างไร

9
ทำไมไม่เปิดเผยคีย์หลัก
ในการศึกษาของฉันฉันได้รับแจ้งว่าเป็นความคิดที่ไม่สมบูรณ์ที่จะเปิดเผยคีย์หลักที่แท้จริง (ไม่เพียง แต่คีย์ DB แต่ผู้เข้าถึงหลักทั้งหมด) ให้กับผู้ใช้ ฉันคิดเสมอว่าเป็นปัญหาด้านความปลอดภัย (เพราะผู้โจมตีสามารถพยายามอ่านสิ่งที่ไม่ใช่ของตนเอง) ตอนนี้ฉันต้องตรวจสอบว่าผู้ใช้ได้รับอนุญาตให้เข้าถึงหรือไม่มีเหตุผลอื่นอีกหรือไม่ นอกจากนี้เนื่องจากผู้ใช้ของฉันต้องเข้าถึงข้อมูลต่อไปฉันจะต้องมีรหัสสาธารณะสำหรับโลกภายนอกที่ใดที่หนึ่ง ตอนนี้รหัสสาธารณะมีปัญหาเช่นเดียวกับคีย์หลักใช่ไหม มีการร้องขอตัวอย่างเกี่ยวกับสาเหตุที่ทำเช่นนั้นดังนั้นนี่คือตัวอย่าง โปรดจำไว้ว่าคำถามนั้นมีความหมายเกี่ยวกับหลักการนั้นไม่เพียง แต่จะนำไปใช้ในตัวอย่างนี้เท่านั้น คำตอบที่กล่าวถึงสถานการณ์อื่น ๆ ยินดีต้อนรับอย่างชัดเจน แอปพลิเคชัน (เว็บมือถือ) ที่จัดการกิจกรรมมี UIs หลายตัวและอย่างน้อยหนึ่ง API อัตโนมัติสำหรับการสื่อสารระหว่างระบบ (eG แผนกบัญชีต้องการทราบว่าจะเรียกเก็บเงินจากลูกค้ามากน้อยเพียงใดจากสิ่งที่ทำ) แอปพลิเคชันมีลูกค้าหลายรายดังนั้นการแยกข้อมูลของพวกเขา (อย่างมีเหตุผลข้อมูลจะถูกเก็บไว้ในฐานข้อมูลเดียวกัน) เป็นสิ่งที่ต้องมีในระบบ คำขอแต่ละรายการจะถูกตรวจสอบความถูกต้องไม่ว่าจะเกิดอะไรขึ้น กิจกรรมนั้นละเอียดมากดังนั้นมันจึงอยู่รวมกันในวัตถุคอนเทนเนอร์บางตัวให้เรียกมันว่า "งาน" สาม usecases: ผู้ใช้ A ต้องการส่งผู้ใช้ B ไปยังงานบางอย่างดังนั้นเขาจึงส่งลิงก์ (HTTP) ให้เขาเพื่อให้กิจกรรมเสร็จสิ้นที่นั่น ผู้ใช้ B ต้องออกไปข้างนอกอาคารเพื่อเปิด Task บนอุปกรณ์มือถือ การบัญชีต้องการเรียกเก็บเงินจากลูกค้าสำหรับงาน แต่ใช้ระบบบัญชีบุคคลที่สามที่โหลดงาน / กิจกรรมโดยอัตโนมัติด้วยรหัสบางอย่างที่อ้างถึง …

4
TDD - Outside In vs Inside Out
อะไรคือความแตกต่างระหว่างการสร้างแอปพลิเคชันOutside Inกับการสร้างInside Outโดยใช้ TDD นี่คือหนังสือที่ฉันอ่านเกี่ยวกับ TDD และการทดสอบหน่วย: การทดสอบพัฒนาขับเคลื่อน: โดยตัวอย่าง การพัฒนาขับเคลื่อนทดสอบ: คู่มือปฏิบัติ: แนวทางปฏิบัติ: แนวทางปฏิบัติ โซลูชั่นโลกแห่งความจริงสำหรับการพัฒนา PHP Framework คุณภาพสูงและ การพัฒนาทดสอบขับเคลื่อนแอพพลิเคชันใน Microsoft รูปแบบการทดสอบNET xUnit: รหัสการทดสอบการปรับ โครงสร้างใหม่ศิลปะการทดสอบหน่วย: ด้วยตัวอย่างใน. Net การพัฒนาซอฟต์แวร์เชิงวัตถุแนะนำโดยการทดสอบ ---> อันนี้ยากที่จะเข้าใจจริงๆเพราะ JAVA ไม่ใช่ภาษาหลักของฉัน :) เกือบทั้งหมดอธิบายถึงพื้นฐานของ TDD และการทดสอบหน่วยโดยทั่วไป แต่ด้วยการกล่าวถึงเพียงเล็กน้อยถึงวิธีต่างๆในการสร้างแอปพลิเคชัน อีกสิ่งที่ฉันสังเกตเห็นคือหนังสือส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) จะไม่สนใจขั้นตอนการออกแบบเมื่อเขียนแอปพลิเคชัน พวกเขามุ่งเน้นที่การเขียนกรณีทดสอบอย่างรวดเร็วและปล่อยให้การออกแบบเกิดขึ้นเอง อย่างไรก็ตามฉันเจอย่อหน้าในรูปแบบการทดสอบ xUnit ที่กล่าวถึงวิธีการที่ผู้คนเข้าหา TDD มี 2 โรงเรียนออกมีนอกใน VS Inside Out น่าเศร้าที่หนังสือเล่มนี้ไม่ได้อธิบายเพิ่มเติมในประเด็นนี้ …

12
วิธีการย้อนกลับและดูรหัสด้วยตาสด [ปิด]
ฉันใช้เวลาหนึ่งปีที่แล้วในฐานะทีมคนเดียวที่พัฒนาแอปพลิเคชันที่มีลูกเล่นมากมาย (35,000+ LoC สำหรับสิ่งที่คุ้มค่า) ปัจจุบันมีเสถียรภาพและในการผลิต อย่างไรก็ตามฉันรู้ว่าทักษะของฉันเริ่มขึ้นเมื่อเริ่มต้นโครงการดังนั้นไม่ต้องสงสัยเลยว่ามีปัญหาสำคัญในรหัส ณ จุดนี้ปัญหาส่วนใหญ่อยู่ในสถาปัตยกรรมโครงสร้างและการโต้ตอบ - ปัญหาง่าย ๆ แม้แต่ปัญหาด้านสถาปัตยกรรม / การออกแบบก็ถูกกำจัดออกไปแล้ว โชคไม่ดีที่ฉันใช้เวลากับโครงการนี้มากจนฉันคิดว่ามันยาก - เข้าใกล้จากมุมมองใหม่เพื่อดูข้อบกพร่องที่ฝังลึกหรือมีอยู่ในการออกแบบ ฉันจะก้าวออกนอกหัวและนอกรหัสของฉันเพื่อให้ได้รูปลักษณ์ใหม่และทำให้ดีขึ้นได้อย่างไร

11
ฉันจะหลีกเลี่ยงการทำรีดักชั่นแบบเรียงซ้อนได้อย่างไร?
ฉันมีโครงการแล้ว ในโครงการนี้ฉันต้องการ refactor เพื่อเพิ่มคุณสมบัติและฉัน refactored โครงการเพื่อเพิ่มคุณสมบัติ ปัญหาคือเมื่อฉันเสร็จแล้วมันกลับกลายเป็นว่าฉันต้องการที่จะทำการเปลี่ยนแปลงอินเตอร์เฟซเล็กน้อยเพื่อรองรับมัน ดังนั้นฉันจึงทำการเปลี่ยนแปลง จากนั้นคลาสการบริโภคไม่สามารถนำไปใช้กับอินเทอร์เฟซปัจจุบันในแง่ของอินเทอร์เฟซใหม่ดังนั้นมันจึงต้องการอินเทอร์เฟซใหม่เช่นกัน ตอนนี้สามเดือนต่อมาและฉันต้องแก้ไขปัญหาที่ไม่เกี่ยวข้องอย่างมากมายนับไม่ถ้วนและฉันกำลังมองหาการแก้ปัญหาที่ถูกทำแผนที่สำหรับหนึ่งปีต่อจากนี้ อีกครั้ง ฉันจะหลีกเลี่ยงการปรับลดประเภทของการเรียงซ้อนในอนาคตได้อย่างไร มันเป็นแค่อาการของชั้นเรียนก่อนหน้าของฉันซึ่งขึ้นอยู่กับแต่ละคนแน่นเกินไปหรือไม่? การแก้ไขสั้น ๆ : ในกรณีนี้ refactor เป็นคุณลักษณะเนื่องจาก refactor เพิ่มความสามารถในการขยายของโค้ดบางส่วนและลดการเชื่อมต่อบางส่วน นั่นหมายความว่าผู้พัฒนาภายนอกสามารถทำอะไรได้มากกว่าซึ่งเป็นคุณลักษณะที่ฉันต้องการนำเสนอ ดังนั้นตัวปรับเปลี่ยนดั้งเดิมเองไม่ควรเปลี่ยนฟังก์ชัน แก้ไขที่ใหญ่กว่าที่ฉันสัญญาห้าวันที่ผ่านมา: ก่อนที่ฉันจะเริ่ม refactor นี้ฉันมีระบบที่ฉันมีอินเทอร์เฟซ แต่ในการนำไปใช้นั้นฉันเพิ่งdynamic_castผ่านการใช้งานที่เป็นไปได้ทั้งหมดที่ฉันจัดส่ง เห็นได้ชัดว่านั่นหมายความว่าคุณไม่สามารถสืบทอดจากอินเทอร์เฟซสำหรับสิ่งใดสิ่งหนึ่งและอย่างที่สองว่ามันจะเป็นไปไม่ได้สำหรับทุกคนที่ไม่มีการเข้าถึงเพื่อใช้งานอินเทอร์เฟซนี้ ดังนั้นฉันตัดสินใจว่าฉันต้องการแก้ไขปัญหานี้และเปิดอินเทอร์เฟซสำหรับการบริโภคสาธารณะเพื่อให้ทุกคนสามารถใช้งานได้และการใช้อินเทอร์เฟซนั้นเป็นสัญญาทั้งหมดที่จำเป็นต้องมี - การปรับปรุงอย่างชัดเจน เมื่อฉันค้นหาและฆ่าด้วยไฟในทุกสถานที่ที่ฉันได้ทำสิ่งนี้ฉันพบที่เดียวที่พิสูจน์แล้วว่าเป็นปัญหาเฉพาะ มันขึ้นอยู่กับรายละเอียดการใช้งานของคลาสที่ได้รับมาทั้งหมดและฟังก์ชั่นการทำซ้ำที่มีการใช้งานแล้ว แต่ดีกว่าที่อื่น มันอาจถูกนำมาใช้ในแง่ของอินเทอร์เฟซสาธารณะแทนและนำมาใช้ใหม่การใช้งานที่มีอยู่ของฟังก์ชั่นนั้น ฉันค้นพบว่ามันจำเป็นต้องใช้บริบทบางอย่างในการทำงานอย่างถูกต้อง พูดโดยประมาณการเรียกใช้งานก่อนหน้านี้ดูเหมือนจะเป็นไปได้ for(auto&& a : as) { f(a); } อย่างไรก็ตามเพื่อให้ได้บริบทนี้ฉันต้องเปลี่ยนมันเป็นอะไรที่มากกว่า std::vector<Context> contexts; for(auto&& a …

15
เป็นเรื่องปกติหรือไม่ที่จะคิดถึงปัญหาการออกแบบเป็นเวลาหลายวันโดยที่ไม่มีการเขียนโค้ด? [ปิด]
บางครั้งฉันจ้องไปที่ช่องว่างหรือวาดภาพไอเดียและเขียนโค้ดหลอกลงบนกระดาษ จากนั้นฉันเกามันและเริ่มใหม่อีกครั้งจากนั้นเมื่อฉันคิดว่าฉันมีทางออกที่ถูกต้องสำหรับปัญหาที่ฉันเริ่มเขียนรหัส เป็นเรื่องปกติหรือเปล่าที่ต้องคิดมากเป็นเวลาหลายวันโดยไม่ต้องเขียนโค้ด? นี่เป็นสัญญาณที่บ่งบอกว่าฉันกำลังเข้าใกล้ปัญหาผิดทั้งหมดหรือไม่? มันทำให้ฉันกังวลที่จะไม่ได้รับรหัสที่เป็นรูปธรรมใด ๆ ที่เขียนใน IDE ของฉัน
52 design 

1
คุณออกแบบโปรแกรมใน Haskell หรือภาษาโปรแกรมภาษาอื่น ๆ
ฉันมีประสบการณ์ในการเขียนโปรแกรมเชิงวัตถุเช่น c # หรือ ruby ฉันรู้วิธีออกแบบโปรแกรมในลักษณะเชิงวัตถุวิธีสร้างคลาสและวัตถุและวิธีกำหนดความสัมพันธ์ระหว่างพวกเขา ฉันรู้รูปแบบการออกแบบด้วย คนเขียนโปรแกรมที่ใช้งานได้อย่างไร พวกเขาจะเริ่มอย่างไร มีรูปแบบการออกแบบสำหรับภาษาที่ใช้งานได้หรือไม่? วิธีการเช่นการเขียนโปรแกรมที่รุนแรงหรือการพัฒนาที่คล่องตัวสามารถใช้กับภาษาที่ใช้งานได้หรือไม่?

9
คุณควรป้องกันค่าที่ไม่คาดคิดจาก API ภายนอกหรือไม่
ช่วยบอกว่าคุณมีการเข้ารหัสฟังก์ชั่นที่ต้องใช้ข้อมูลจาก MyAPIAPI ที่ภายนอก ที่ภายนอก API MyAPIมีสัญญาที่ระบุว่ามันจะกลับมาได้หรือstringnumber มันคือการแนะนำเพื่อป้องกันสิ่งที่ชอบnull, undefined, booleanฯลฯ แม้ว่ามันจะไม่ได้เป็นส่วนหนึ่งของ API ของMyAPI? โดยเฉพาะอย่างยิ่งเนื่องจากคุณไม่สามารถควบคุม API นั้นคุณไม่สามารถรับประกันผ่านการวิเคราะห์ประเภทแบบคงที่ดังนั้นจะปลอดภัยกว่าขออภัยหรือไม่ ฉันกำลังคิดเกี่ยวกับหลักการความแข็งแกร่ง

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