คำถามติดแท็ก clean-code

คำว่า "รหัสสะอาด" ใช้เพื่ออธิบายรหัสการเขียนโปรแกรมคอมพิวเตอร์ที่กระชับเข้าใจง่ายและแสดงเจตนาของโปรแกรมเมอร์อย่างชัดเจน คำถามที่มีแท็กนี้เกี่ยวข้องกับกระบวนการเขียนโค้ดที่สะอาดหรือการสร้างรหัส "สกปรก" เก่าให้เป็นรหัสที่สะอาด

16
เจ้านายของฉันขอให้ฉันหยุดเขียนฟังก์ชั่นเล็ก ๆ และทำทุกอย่างในลูปเดียวกัน
ฉันอ่านหนังสือชื่อClean Codeของ Robert C. Martin แล้ว ในหนังสือเล่มนี้ฉันได้เห็นวิธีการมากมายในการทำความสะอาดโค้ดเช่นการเขียนฟังก์ชั่นเล็ก ๆ การเลือกชื่ออย่างระมัดระวัง ฯลฯ ดูเหมือนว่าหนังสือที่น่าสนใจที่สุดเกี่ยวกับรหัสที่ฉันอ่าน อย่างไรก็ตามวันนี้เจ้านายของฉันไม่ชอบวิธีที่ฉันเขียนโค้ดหลังจากอ่านหนังสือเล่มนี้ ข้อโต้แย้งของเขาคือ การเขียนฟังก์ชั่นเล็ก ๆ เป็นความเจ็บปวดเพราะมันบังคับให้คุณย้ายเข้าไปในฟังก์ชั่นเล็ก ๆ แต่ละอันเพื่อดูว่าโค้ดกำลังทำอะไรอยู่ ใส่ทุกอย่างไว้ในลูปหลักหลักแม้ว่าลูปหลักจะมีมากกว่า 300 บรรทัดมันจะอ่านเร็วขึ้น เขียนฟังก์ชั่นเล็ก ๆ เท่านั้นหากคุณต้องทำซ้ำรหัส อย่าเขียนฟังก์ชั่นที่มีชื่อของความคิดเห็นใส่รหัสบรรทัดที่ซับซ้อนของคุณ (3-4 บรรทัด) ด้วยความคิดเห็นด้านบน คุณสามารถแก้ไขโค้ดที่ล้มเหลวได้เช่นเดียวกัน สิ่งนี้ขัดต่อทุกสิ่งที่ฉันอ่าน ปกติคุณเขียนรหัสได้อย่างไร หนึ่งวงใหญ่หลักไม่มีฟังก์ชั่นเล็ก ๆ ? ภาษาที่ฉันใช้ส่วนใหญ่เป็นจาวาสคริปต์ ตอนนี้ฉันมีปัญหาในการอ่านเนื่องจากฉันได้ลบฟังก์ชั่นที่ตั้งชื่อไว้อย่างชัดเจนแล้วนำทุกอย่างมารวมกันเป็นวงใหญ่ อย่างไรก็ตามเจ้านายของฉันชอบวิธีนี้ ตัวอย่างหนึ่งคือ: // The way I would write it if (isApplicationInProduction(headers)) { phoneNumber = …

23
การเขียนโปรแกรมอย่างหมดจดเมื่อเขียนโค้ดทางวิทยาศาสตร์
ฉันไม่ได้เขียนโครงการขนาดใหญ่จริงๆ ฉันไม่ได้บำรุงรักษาฐานข้อมูลขนาดใหญ่หรือจัดการกับโค้ดหลายล้านบรรทัด รหัสของฉันคือ "สคริปต์" สิ่งที่พิมพ์ - สิ่งที่จะทดสอบฟังก์ชั่นทางคณิตศาสตร์หรือเพื่อจำลองบางอย่าง - "การเขียนโปรแกรมทางวิทยาศาสตร์" โปรแกรมที่ยาวที่สุดที่ฉันทำงานจนถึงจุดนี้คือโค้ดสองร้อยบรรทัดและโปรแกรมส่วนใหญ่ที่ฉันใช้อยู่นั้นมีประมาณ 150 รายการ รหัสของฉันยังอึ ฉันรู้เรื่องนี้เมื่อวันก่อนขณะที่ฉันพยายามค้นหาไฟล์ที่ฉันเขียนสักครู่แล้ว แต่ฉันอาจจะเขียนทับและฉันไม่ได้ใช้การควบคุมเวอร์ชันซึ่งอาจทำให้คุณรู้สึกปวดร้าวใจเป็นจำนวนมาก รูปแบบของรหัสของฉันมีความซับซ้อนและเต็มไปด้วยความคิดเห็นที่ล้าสมัยซึ่งระบุวิธีอื่นในการทำบางสิ่งหรือคัดลอกบรรทัดของรหัสไป ในขณะที่ชื่อตัวแปรเริ่มต้นที่ดีมากและเป็นคำอธิบายในขณะที่ฉันเพิ่มหรือเปลี่ยนแปลงสิ่งต่าง ๆ ตามเช่นสิ่งใหม่ที่ใครบางคนต้องการทดสอบรหัสได้รับการซ้อนทับด้านบนและเขียนทับและเพราะฉันรู้สึกว่าสิ่งนี้ควรทดสอบอย่างรวดเร็วตอนนี้ มีกรอบฉันเริ่มใช้ชื่อตัวแปรเส็งเคร็งและไฟล์ไปที่หม้อ ในโครงการที่ฉันกำลังทำอยู่ตอนนี้ฉันอยู่ในช่วงที่สิ่งเหล่านี้กลับมากัดฉันอย่างมาก แต่ปัญหาคือ (นอกเหนือจากการใช้การควบคุมเวอร์ชันและการสร้างไฟล์ใหม่สำหรับการทำซ้ำแต่ละครั้งและบันทึกทั้งหมดในไฟล์ข้อความที่ไหนสักแห่งซึ่งอาจจะช่วยสถานการณ์ได้อย่างมาก) ฉันไม่รู้จริง ๆ ว่าจะดำเนินการปรับปรุงอย่างไร สไตล์การเข้ารหัสที่แท้จริงของฉัน การทดสอบหน่วยจำเป็นสำหรับการเขียนโค้ดขนาดเล็กลงหรือไม่? แล้ว OOP ล่ะ วิธีใดบ้างที่ดีสำหรับการเขียนโค้ดที่ดีและสะอาดได้อย่างรวดเร็วเมื่อทำการ "การเขียนโปรแกรมเชิงวิทยาศาสตร์" ซึ่งต่างจากการทำงานในโครงการขนาดใหญ่ ฉันถามคำถามเหล่านี้เพราะบ่อยครั้งการเขียนโปรแกรมเองนั้นไม่ซับซ้อน มันเกี่ยวกับคณิตศาสตร์หรือวิทยาศาสตร์ที่ฉันกำลังทดสอบหรือค้นคว้าด้วยการเขียนโปรแกรม เช่นคลาสจำเป็นหรือไม่เมื่อมีตัวแปรสองตัวและฟังก์ชั่นอาจดูแลได้ (พิจารณาสิ่งเหล่านี้โดยทั่วไปเป็นสถานการณ์ที่ความเร็วของโปรแกรมเป็นที่ต้องการในตอนท้ายที่เร็วกว่า - เมื่อคุณรันขั้นตอนการจำลองมากกว่า 25,000,000+ ครั้งคุณต้องการให้มันเป็นแบบนั้น) บางทีนี่อาจจะกว้างเกินไปและถ้าเป็นเช่นนั้นฉันขอโทษ แต่เมื่อดูหนังสือโปรแกรมพวกเขามักจะพูดถึงโครงการขนาดใหญ่ รหัสของฉันไม่จำเป็นต้องมี OOP และมันก็ค่อนข้างสั้นอยู่แล้วดังนั้นจึงไม่เหมือน "โอ้ แต่ไฟล์จะลดลงหนึ่งพันบรรทัดถ้าเราทำอย่างนั้น!" ฉันต้องการทราบวิธี …

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

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, …

20
คุณจะลบรหัสที่ดูเหมือนไม่เคยใส่ออกมาได้อย่างไร
คุณได้พบรหัสบางอย่างที่ดูฟุ่มเฟือยและคอมไพเลอร์ไม่สังเกตเห็นว่า คุณต้องทำอะไรเพื่อให้แน่ใจ (หรือใกล้เคียงที่สุดเท่าที่จะทำได้) การลบรหัสนี้จะไม่ทำให้เกิดการถดถอย ความคิดสองประการเกิดขึ้นในใจ "เพียงแค่" ใช้การหักเงินโดยพิจารณาว่ารหัสควรจะทำงานหรือไม่ อย่างไรก็ตามบางครั้งนี่อาจเป็นงานที่ซับซ้อนใช้เวลานานและมีความเสี่ยงเล็กน้อย (การประเมินของคุณมีแนวโน้มที่จะเกิดข้อผิดพลาด) โดยไม่มีผลตอบแทนทางธุรกิจ ทำการบันทึกในส่วนของรหัสนั้นและดูความถี่ที่ได้รับในทางปฏิบัติ หลังจากการประหารชีวิตมากพอคุณควรมีความมั่นใจในการลบรหัสนั้นอย่างปลอดภัย มีความคิดที่ดีขึ้นหรืออะไรบางอย่างที่เป็นแนวทางแบบบัญญัติหรือไม่?
125 clean-code 

16
ฉันควรลบรหัสที่ไม่อ้างอิงหรือไม่
ฉันกำลังทำงานกับฐานรหัสขนาดกลาง (100k บรรทัด) โค้ดทั้งหมดเป็นรหัสล่าสุด (น้อยกว่าหนึ่งปี) และมีการทดสอบหน่วยที่ครอบคลุม ฉันพบกับวิธีการที่ไม่ได้ใช้งานที่ใดอีกต่อไปหรืออ้างอิงในการทดสอบหน่วยซึ่งทดสอบเฉพาะวิธีนั้นเท่านั้น ฉันควรลบรหัสนี้หรือไม่ถ้าฉันแน่ใจว่าไม่จำเป็นอีกต่อไป เหตุผลในการลบ: รหัสน้อยกว่าข้อบกพร่องน้อยลง รหัสที่น้อยลงจะง่ายกว่าสำหรับผู้อื่นในการย่อย มันยังอยู่ภายใต้การควบคุมของแหล่งที่มา เหตุผลที่จะเก็บมันไว้: สามารถใช้เป็นข้อมูลอ้างอิง มันอาจจะมีประโยชน์ในบางครั้ง มันอาจถูกเขียนขึ้นเพื่อ 'ปัดเศษ' ฟังก์ชันการทำงานสำหรับชั้นเรียน

13
คุณจะปรับรหัสเพิ่มเติมให้ถูกเขียนโดยทำตามวิธีปฏิบัติที่สะอาดของรหัสได้อย่างไร
ผู้ดำเนินรายการหมายเหตุ คำถามนี้มีคำตอบแล้วสิบเจ็ดคำตอบแล้ว ก่อนที่คุณจะโพสต์คำตอบใหม่โปรดอ่านคำตอบที่มีอยู่และตรวจสอบให้แน่ใจว่ามุมมองของคุณยังไม่ครอบคลุมเพียงพอ ฉันได้ปฏิบัติตามแนวทางปฏิบัติบางข้อที่แนะนำในหนังสือ "Clean Code" ของ Robert Martin โดยเฉพาะอย่างยิ่งวิธีการที่ใช้กับซอฟต์แวร์ประเภทที่ฉันทำงานด้วยและแนวทางที่เหมาะสมกับฉัน (ฉันไม่ปฏิบัติตามแนวคิด) . ผลข้างเคียงหนึ่งที่ฉันสังเกตเห็นคือรหัส "สะอาด" ที่ฉันเขียนนั้นเป็นรหัสมากกว่าที่ฉันไม่ได้ปฏิบัติตาม แนวทางปฏิบัติเฉพาะที่นำไปสู่สิ่งนี้คือ: Encapsulating conditionals ดังนั้นแทนที่จะ if(contact.email != null && contact.emails.contains('@') ฉันสามารถเขียนวิธีการขนาดเล็กเช่นนี้ private Boolean isEmailValid(String email){...} การแทนที่ความคิดเห็นแบบอินไลน์ด้วยวิธีส่วนตัวอื่น ๆ เพื่อให้ชื่อวิธีการอธิบายตัวเองมากกว่าที่จะมีความคิดเห็นแบบอินไลน์ด้านบนของมัน คลาสควรมีเหตุผลเดียวเท่านั้นที่จะเปลี่ยน และอีกไม่กี่คน ประเด็นคือสิ่งที่อาจเป็นวิธีการ 30 บรรทัดกลายเป็นชั้นเรียนเพราะวิธีการเล็ก ๆ ที่แทนที่ความคิดเห็นและ encapsulate เงื่อนไข ฯลฯ เมื่อคุณรู้ว่าคุณมีวิธีการมากมายแล้วมัน "เข้าท่า" เพื่อ ใส่ฟังก์ชั่นทั้งหมดไว้ในคลาสเดียวเมื่อจริง ๆ แล้วมันควรเป็นวิธี ฉันทราบว่าการฝึกฝนใด ๆ …

14
ช่วงเวลาสั้น ๆ ที่ไม่ได้เป็นคุณธรรมอีกต่อไปคืออะไร?
การแก้ไขข้อผิดพลาดเมื่อเร็ว ๆ นี้ทำให้ฉันต้องใช้รหัสที่เขียนโดยสมาชิกในทีมคนอื่นซึ่งฉันพบสิ่งนี้ (เป็น C #) return (decimal)CostIn > 0 && CostOut > 0 ? (((decimal)CostOut - (decimal)CostIn) / (decimal)CostOut) * 100 : 0; ตอนนี้การอนุญาตให้มีเหตุผลที่ดีสำหรับการปลดเปลื้องเหล่านี้ยังคงเป็นเรื่องยากมากที่จะติดตาม มีข้อบกพร่องเล็กน้อยในการคำนวณและฉันต้องแก้ให้หายยุ่งเพื่อแก้ไขปัญหา ฉันรู้ว่ารูปแบบการเขียนโค้ดของบุคคลนี้จากการตรวจสอบโค้ดและวิธีการของเขาก็คือสั้นกว่านั้นเกือบจะดีกว่าเสมอ และแน่นอนว่ามันมีคุณค่าอยู่ที่นั่น: เราทุกคนได้เห็นกลุ่มของตรรกะที่มีเงื่อนไขที่ซับซ้อนโดยไม่จำเป็น แต่เขาเก่งกว่าฉันมากในตอนต่อไปของเครือข่ายผู้ประกอบการที่อัดแน่นไปด้วยคำพูดเดียว แน่นอนว่านี่เป็นเรื่องของสไตล์ แต่มีอะไรที่เขียนหรือค้นคว้าเกี่ยวกับการตระหนักถึงจุดที่ความพยายามในการกระชับรหัสหยุดที่มีประโยชน์และกลายเป็นอุปสรรคต่อความเข้าใจ? สาเหตุของการปลดเปลื้องคือ Entity Framework db จำเป็นต้องเก็บสิ่งเหล่านี้เป็นชนิดที่ไม่สามารถใช้ได้ ทศนิยม? ไม่เทียบเท่ากับทศนิยมใน C # และจำเป็นต้องร่าย

9
เหตุใดฉันจึงควรใช้การฉีดพึ่งพา
ฉันมีช่วงเวลาที่ยากมองหาแหล่งข้อมูลเกี่ยวกับทำไมฉันจึงควรใช้ฉีดพึ่งพา ทรัพยากรส่วนใหญ่ที่ฉันเห็นอธิบายว่ามันเพิ่งผ่านอินสแตนซ์ของวัตถุไปยังอีกอินสแตนซ์ของวัตถุ แต่ทำไม? นี่เป็นเพียงสถาปัตยกรรม / รหัสที่สะอาดขึ้นหรือมีผลกระทบต่อประสิทธิภาพโดยรวมหรือไม่ ทำไมฉันต้องทำสิ่งต่อไปนี้? class Profile { public function deactivateProfile(Setting $setting) { $setting->isActive = false; } } แทนที่จะเป็นดังต่อไปนี้? class Profile { public function deactivateProfile() { $setting = new Setting(); $setting->isActive = false; } }

9
ทำความสะอาดรหัสความคิดเห็นเกี่ยวกับเอกสารประกอบคลาส
ฉันกำลังคุยกับเพื่อนร่วมงานคนใหม่เกี่ยวกับการแสดงความคิดเห็น เราทั้งคู่ชอบClean Codeและฉันพอใจกับความจริงที่ว่าควรหลีกเลี่ยงการแสดงความคิดเห็นแบบอินไลน์โค้ดและควรใช้ชื่อคลาสและเมธอดเพื่อแสดงสิ่งที่พวกเขาทำ อย่างไรก็ตามฉันเป็นแฟนตัวยงของการเพิ่มบทสรุปของชั้นเรียนขนาดเล็กที่พยายามอธิบายจุดประสงค์ของชั้นเรียนและสิ่งที่เป็นตัวแทนจริง ๆ แล้วเพื่อให้ง่ายต่อการรักษารูปแบบหลักการความรับผิดชอบเดียว ฉันยังเคยเพิ่มบทสรุปแบบบรรทัดเดียวให้กับวิธีการที่อธิบายถึงวิธีการที่ควรทำ ตัวอย่างทั่วไปคือวิธีการง่าย ๆ public Product GetById(int productId) {...} ฉันกำลังเพิ่มสรุปวิธีการดังต่อไปนี้ /// <summary> /// Retrieves a product by its id, returns null if no product was found. /// </summary ฉันเชื่อว่าความจริงที่ว่าวิธีการคืนค่า null ควรมีการบันทึกไว้ ผู้พัฒนาที่ต้องการเรียกใช้เมธอดไม่ควรเปิดโค้ดของฉันเพื่อดูว่าเมธอดส่งคืน null หรือมีข้อผิดพลาดเกิดขึ้นหรือไม่ บางครั้งมันเป็นส่วนหนึ่งของอินเทอร์เฟซดังนั้นนักพัฒนาซอฟต์แวร์จึงไม่ทราบว่ารหัสอ้างอิงใดทำงานอยู่หรือไม่ อย่างไรก็ตามเพื่อนร่วมงานของฉันคิดว่าข้อคิดเห็นเหล่านี้เป็น " กลิ่นรหัส " และ "ความคิดเห็นมักจะล้มเหลว" ( Robert C. Martin …

9
ไลบรารีโอเพ่นซอร์สขนาดใหญ่จะได้รับการดูแลรักษาอย่างไรในขณะที่มีรหัสห่างไกลจากวิธีปฏิบัติที่“ สะอาดโค้ด”
ฉันยังไม่มีประสบการณ์ในการเขียนรหัสคุณภาพสูงดังนั้นฉันจึงอ่านหนังสือเกี่ยวกับปัญหาเช่นClean Codeของ Robert C. Martin และตรวจสอบรหัสของห้องสมุดที่มีชื่อเสียงเพื่อพัฒนาทักษะของฉัน แม้ว่าไลบรารีโอเพนซอร์สจำนวนมากได้รับการดูแลรักษามานานหลายปีซึ่งหมายความว่ามันไม่น่าเป็นไปได้ที่พวกเขาจะไม่ได้อยู่ในเส้นทางที่ถูกต้อง แต่ฉันพบว่าโค้ดในหลาย ๆ โค้ดหลายร้อยบรรทัด ดังนั้นคำถามของฉันคือ: หลักการของโค้ดที่สะอาดเกินไปถูก จำกัด และเราสามารถทำได้โดยไม่ต้องใช้พวกมันในห้องสมุดหลาย ๆ ถ้าไม่เป็นเช่นนั้นห้องสมุดขนาดใหญ่จะได้รับการดูแลอย่างไรโดยไม่คำนึงถึงหลักการเหล่านี้มากมาย? ฉันขอขอบคุณที่ชี้แจงสั้น ๆ ฉันขอโทษถ้าคำถามดูเหมือนว่าโง่จากมือใหม่ แก้ไข ตรวจสอบตัวอย่างนี้ในห้องสมุดButterknife - หนึ่งในห้องสมุดที่มีชื่อเสียงที่สุดในชุมชน Android

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

8
ปัญหาการตั้งชื่อ: ควรเปลี่ยนชื่อ“ ISomething” เป็น“ Something” หรือไม่ [ปิด]
บทของลุงบ็อบเกี่ยวกับชื่อในClean Codeแนะนำให้คุณหลีกเลี่ยงการเข้ารหัสในชื่อส่วนใหญ่เกี่ยวกับสัญกรณ์ฮังการี เขายังกล่าวถึงการลบIคำนำหน้าจากอินเทอร์เฟซโดยเฉพาะ แต่ไม่แสดงตัวอย่างของสิ่งนี้ สมมติว่า: การใช้อินเตอร์เฟสเป็นส่วนใหญ่เพื่อให้สามารถทดสอบได้ผ่านการฉีดแบบพึ่งพา ในหลายกรณีสิ่งนี้นำไปสู่การมีอินเทอร์เฟซเดียวกับตัวดำเนินการเดียว ยกตัวอย่างเช่นสองคนนี้ควรตั้งชื่ออะไร ParserและConcreteParser? ParserและParserImplementation? public interface IParser { string Parse(string content); string Parse(FileInfo path); } public class Parser : IParser { // Implementations } หรือฉันควรเพิกเฉยต่อข้อเสนอแนะนี้ในกรณีการดำเนินการแบบครั้งเดียวเช่นนี้หรือไม่?

5
ทำไมจำนวนเวทมนต์จำนวนมากจึงยอมรับได้ใน CSS และ SVG
บ่อยครั้งที่ฉันเห็นคำถามในรายการคำถามเครือข่ายที่น่าสนใจเช่นนี้ซึ่งโดยทั่วไปแล้วถามว่า "ฉันจะวาดรูปทรงโดยพลการใน CSS ได้อย่างไร" คำตอบก็คือบล็อกข้อมูล CSS หรือ SVG สองกลุ่มที่มีค่าฮาร์ดโค้ดแบบสุ่มจำนวนมากซึ่งสร้างรูปร่างตามที่ร้องขอ เมื่อฉันดูที่นี้ฉันคิดว่า 'Yuck! สิ่งที่น่าเกลียดของรหัส ฉันหวังว่าฉันจะไม่เห็นสิ่งประเภทนี้ในโครงการของฉัน ' อย่างไรก็ตามฉันเห็นประเภทของคำถาม & บ่อยครั้งมากและมีผู้ติดตามจำนวนมากดังนั้นชุมชนจึงไม่คิดว่าพวกเขาจะไม่ดี แต่ทำไมถึงเป็นที่ยอมรับ? มาจากประสบการณ์การใช้งานส่วนหลังของฉันสิ่งนี้ไม่สมเหตุสมผลสำหรับฉัน เหตุใดจึงเป็นเช่นนั้นสำหรับ CSS / SVG

4
มันจะดีกว่าถ้าจะเรียกฟังก์ชั่นที่ไม่มีผลกระทบ ณ จุดนั้นถ้ามันปรับปรุงความชัดเจนของโค้ด?
ฉันมีสามมุมมองในโปรแกรมของฉัน (แอพ iOS) มีเพียงหนึ่งรายการเท่านั้นที่ใช้งานในเวลาเดียวกันดังนั้นฉันจึงปิดการมองเห็นสำหรับพวกเขาสองคนและสลับการมองเห็นเมื่อผู้ใช้กดปุ่ม มุมมองจะเริ่มต้นเป็นมองเห็นได้ดังนั้นฉันตั้งค่าการมองเห็นออกในรหัสก่อนที่จะแสดงมุมมองหลัก ที่ฉันสามารถทำได้ [view1 setAlpha:0.0f]; [view2 setAlpha:0.0f]; สำหรับมุมมองสองมุมมอง แต่ตอนนี้มุมมองที่สาม (มุมมองที่ควรมองเห็นเมื่อเริ่มต้นแอพ) ไม่ได้ถูกระบุ ฉันใส่ [view3 setAlpha:1.0f]; หลังจากสองคนแรกเพราะฉันคิดว่ามันชัดเจนว่ามีสามมุมมองจริงไม่ใช่สองอย่างที่คิดเมื่อเห็นรหัส โปรแกรมเมอร์คนอื่นทำอย่างไร มันเป็นการตั้งค่าอย่างหมดจดหรือมีการประชุมบ้างไหม? หากการโทรนั้นหนักมากมันจะดีกว่าที่จะไม่โทรเมื่อมันไม่จำเป็น แต่ฉันสงสัยเกี่ยวกับสิ่งเล็ก ๆ น้อย ๆ เช่นแบบของฉัน

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