คำถามติดแท็ก anti-patterns

รูปแบบการต่อต้านเป็นพฤติกรรมหรือการปฏิบัติที่เป็นเรื่องปกติแม้จะไม่มีประสิทธิภาพหรือไม่ได้ผลก็ตาม

4
การเขียนโปรแกรมตามรูปแบบคืออะไร?
ใครสามารถอธิบายความลุ่มหลงด้วยรูปแบบและรูปแบบการต่อต้านในการเขียนโปรแกรมได้หรือไม่? ฉันถามเพราะฉันไม่รู้จริง ๆ ว่ารูปแบบใดมีความหมาย เมื่อต้องเผชิญกับงานเขียนโปรแกรมฉันคิดเกี่ยวกับปัญหานิดหน่อยให้เขียนโครงสร้างข้อมูลบางอย่างที่ฉันคิดว่าจะเกี่ยวข้องกันสร้างต้นแบบของโซลูชันแยกส่วนของโมดูลและทำซ้ำ ฉันคิดว่าไม่มีที่ไหนในกระบวนการ "โอ้ฉันต้องการรูปแบบ FunkyLookyTastic ที่นี่"

2
ทำให้เชื่องคลาส 'ฟังก์ชันยูทิลิตี้'
ใน codebase Java ของเราฉันเห็นรูปแบบต่อไปนี้: /** This is a stateless utility class that groups useful foo-related operations, often with side effects. */ public class FooUtil { public int foo(...) {...} public void bar(...) {...} } /** This class does applied foo-related things. */ class FooSomething { int DoBusinessWithFoo(FooUtil fooUtil, ...) { …

7
ฉันควร refactor ฟังก์ชั่นขนาดใหญ่ที่ส่วนใหญ่ประกอบด้วย regex หนึ่งหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันเพิ่งเขียนฟังก์ชันที่ครอบคลุมประมาณ 100 บรรทัด ได้ยินว่าคุณอาจถูกล่อลวงให้บอกฉันเกี่ยวกับความรับผิดชอบเดี่ยวและกระตุ้นให้ฉันไปปรับโครงสร้าง นี่คือสัญชาตญาณของฉันเช่นกัน แต่นี่คือปัญหา: ฟังก์ชันทำสิ่งหนึ่ง มันดำเนินการจัดการสตริงที่ซับซ้อนและร่างกายฟังก์ชั่นประกอบด้วยส่วนใหญ่ของหนึ่ง verbose regex แยกออกเป็นหลายบรรทัดที่มีเอกสาร ถ้าฉันแยก regex ออกเป็นหลาย ๆ ฟังก์ชั่นฉันรู้สึกว่าฉันจะสูญเสียความสามารถในการอ่านได้เนื่องจากฉันเปลี่ยนภาษาได้อย่างมีประสิทธิภาพและจะไม่สามารถใช้ประโยชน์จากคุณสมบัติบางอย่างของ regex นี่คือคำถามของฉัน: เมื่อพูดถึงการจัดการสตริงที่มีการแสดงออกปกติร่างกายของฟังก์ชั่นขนาดใหญ่ยังคงมีรูปแบบการต่อต้านหรือไม่? ดูเหมือนว่ากลุ่มการดักจับที่ตั้งชื่อไว้นั้นมีจุดประสงค์คล้ายกันมากกับฟังก์ชั่น โดยวิธีการที่ฉันมีการทดสอบสำหรับทุกการไหลผ่าน Regex

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

12
การใช้เงื่อนไขนี้เป็นการป้องกันแบบแผนหรือไม่?
ฉันเห็นสิ่งนี้มากมายในระบบเดิมของเราในที่ทำงาน - ฟังก์ชั่นที่เป็นไปตามนี้: bool todo = false; if(cond1) { ... // lots of code here if(cond2) todo = true; ... // some other code here } if(todo) { ... } ฟังก์ชั่นนี้มีสองส่วน ส่วนแรกทำการประมวลผลบางอย่าง (อาจมีลูปผลข้างเคียงและอื่น ๆ ) และตามวิธีที่อาจตั้งค่าสถานะ "todo" ส่วนที่สองจะดำเนินการก็ต่อเมื่อมีการตั้งค่าสถานะ "todo" ดูเหมือนจะเป็นวิธีที่น่าเกลียดในการทำสิ่งต่าง ๆ และฉันคิดว่ากรณีส่วนใหญ่ที่ฉันใช้เวลาในการทำความเข้าใจจริง ๆ แล้วสามารถนำกลับมาใช้ใหม่ได้เพื่อหลีกเลี่ยงการใช้ธง แต่นี่เป็นรูปแบบการต่อต้านที่แท้จริงความคิดที่ไม่ดีหรือเป็นที่ยอมรับอย่างสมบูรณ์หรือไม่? refactorization ชัดเจนแรกจะตัดเป็นสองวิธี อย่างไรก็ตามคำถามของฉันเกี่ยวกับว่ามีความต้องการ (ในภาษา OO …

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

3
บริบทคำขอทั่วโลก - รูปแบบต่อต้าน?
ฉันได้พูดคุยกับเพื่อนร่วมงานของฉันในวันนี้เกี่ยวกับโครงร่างเว็บของ Python และความประทับใจของเราที่มีต่อพวกเขา ฉันบอกเขาว่าฉันคิดว่า Flask ที่มีคำขอทั่วโลกมีกลิ่นไม่ดีและเป็นรูปแบบการต่อต้าน เอกสารพูดเกี่ยวกับบริบทคำขอ: ในทางตรงกันข้ามระหว่างการจัดการคำขอมีกฎอื่นอยู่สองข้อ: ในขณะที่คำขอใช้งานอยู่วัตถุบริบทท้องถิ่น (flask.request และอื่น ๆ ) ชี้ไปที่คำขอปัจจุบัน รหัสใด ๆ สามารถถือวัตถุเหล่านี้ได้ตลอดเวลา ฉันคิดว่าฉันเข้าใจแนวคิดเบื้องหลังการตัดสินใจออกแบบนี้ - เพื่อทำให้แอปพลิเคชันง่ายขึ้น เป็นเพียงการประนีประนอมเช่นในกรณีของThread Locals : ใช่มันไม่ใช่ความคิดที่สดใสในการใช้เธรดท้องถิ่น พวกเขาทำให้เกิดปัญหาสำหรับเซิร์ฟเวอร์ที่ไม่ได้ขึ้นอยู่กับแนวคิดของเธรดและทำให้แอปพลิเคชันขนาดใหญ่ยากต่อการบำรุงรักษา อย่างไรก็ตาม Flask ไม่ได้ออกแบบมาสำหรับแอพพลิเคชั่นขนาดใหญ่หรือเซิร์ฟเวอร์แบบอะซิงโครนัส Flask ต้องการทำให้รวดเร็วและง่ายต่อการเขียนเว็บแอปพลิเคชันแบบดั้งเดิม การแพตช์ออบเจกต์โกลบอลกับข้อมูลการร้องขอปัจจุบันเป็นรูปแบบการต่อต้านหรือไม่? ฉันเชื่อว่าเป็นเพราะอยู่ในมุมมองของวิเคราะห์รหัสคงที่ทั่วโลกแม้ว่ามันจะไม่ และฉันในฐานะโปรแกรมเมอร์จะไม่เข้าใจวิธีการทำงานโดยไม่อ่านเอกสารอย่างละเอียด และนี้มีผลกระทบในการทดสอบ เป็นการดีที่จะส่งคำขอเป็นอาร์กิวเมนต์เพื่อดู ฉันคิดว่าสามารถอ่านได้ชัดเจนและง่ายขึ้นในการดีบัก และหลีกเลี่ยงสถานะโลก

8
การเปิดและปิดคุณสมบัติ UI (หรืออื่น ๆ ) ขึ้นอยู่กับวันที่ - รหัสกลิ่นหรือไม่
เรามีระบบอันยิ่งใหญ่ที่เขียนใน ASP.NET 2.0 ที่เราต้องเพิ่มฟังก์ชั่นบางอย่าง ปัญหาคือผลิตภัณฑ์บางอย่างมีคุณสมบัติ UI ที่จะต้องเปิดใช้งานสำหรับธุรกิจที่เริ่มต้นหลังจากวันที่แน่นอน (และอื่น ๆ ปิด) ในขณะที่หน้าจะต้องเหมือนกันสำหรับธุรกิจที่มีอยู่ ฉันกำลังผลักดันให้มีการเขียนหน้าใหม่สำหรับธุรกิจใหม่เนื่องจากฉันพบความคิดเกี่ยวกับสวิตช์ JavaScript UI ที่อิงตามวันที่และการผสมตัวควบคุมเว็บสำหรับธุรกิจเก่าและใหม่ให้เป็น "ไม่เรียบร้อย" (สำหรับคำที่ดีกว่า ) การฝึกฝนให้มี UI ตามเวลาเป็นคุณลักษณะที่เป็นที่ยอมรับอย่างกว้างขวางและหากไม่เป็นเช่นนั้นความเสี่ยงที่ทราบกันดีในการใฝ่หาแนวทางปฏิบัตินั้นคืออะไร?

3
การตรวจสอบการโทร TDD จำลอง - มันเป็นรูปแบบต่อต้านหรือไม่?
ฉันทำ TDD มาหลายปีแล้วตอนนี้ฉันรู้สึกดีกับมันมากฉันชอบห้องทดสอบและทุกอย่าง อย่างไรก็ตามฉันสังเกตเห็นว่าเมื่อเร็ว ๆ นี้ฉันได้ทำการตรวจสอบการโทรจำลองจำนวนมาก ตัวอย่างเช่นฉันมีบริการที่จะมีพื้นที่เก็บข้อมูลที่ฉีด - ในการทดสอบหน่วยของฉันฉันจะผ่านการจำลองของพื้นที่เก็บข้อมูลและตรวจสอบว่ามันถูกเรียกว่าภายในวิธีการที่ฉันกำลังทดสอบ จากนั้นฉันจะตรวจสอบว่าผลลัพธ์ที่ส่งคืนนั้นถูกต้อง (ในการทดสอบอื่น) สิ่งนี้ "รู้สึก" ผิดเนื่องจากการทดสอบหน่วยของฉันตอนนี้ควบคู่ไปกับรายละเอียดการใช้งานมาก ฉันได้ยินมาว่าคุณควรทดสอบ "พฤติกรรม" อย่างไรก็ตามในหลาย ๆ สถานการณ์นั่นคือ ... emm - เป็นไปไม่ได้เหรอ? หากคุณมีvoidตัวอย่างเช่นคุณมักจะทดสอบผลข้างเคียง ฉันหมายความว่ามันเป็นเรื่องง่ายที่จะไปข้างหน้าและแสดงรหัสง่ายๆของกะตะซึ่งสามารถแสดงให้เห็นได้ แต่ IMHO มันไม่ได้สะท้อนถึงโปรแกรมโลกที่เราเขียนได้ดีนัก ฉันทำผิดหรือเปล่า? การทดสอบประเภทนี้เป็นรูปแบบการต่อต้านหรือไม่ ฉันขอขอบคุณความคิดเห็นของคุณเกี่ยวกับเรื่องนี้ฉันยังคงเป็นมือใหม่เมื่อพูดถึง TDD

3
DDD - รูปแบบโดเมนโลหิตจางเป็นปฏิปักษ์หรือไม่? เราใช้โมเดลโดเมนที่หลากหลายใช่ไหม [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา รูปแบบของโดเมนโลหิตจางถูกวิพากษ์วิจารณ์เมื่อนานมาแล้วโดยEvans และ Fowlerเนื่องจากเห็นได้ชัดว่ามันขัดกับหลักการเชิงวัตถุ ฯลฯ ชุมชน DDD นั้นสอดคล้องกับข้อความนี้อย่างชัดเจน อย่างไรก็ตามในช่วงไม่กี่ปีที่ผ่านมามีเสียงไม่เห็นด้วยที่อ้างว่ามันไม่ได้เป็นปฏิปักษ์เลยและเป็นตัวอย่างของการปฏิบัติตามหลักการของโซลิด ฉันใช้งาน Spring Framework มาหลายปีแล้ว ทุกโครงการในทุก บริษัท มีชั้นบริการที่มีตรรกะทางธุรกิจอยู่เสมอโดยใช้แหล่งเก็บข้อมูลที่ทำงานกับโมเดลโลหิตจาง (เอนทิตี JPA) นอกจากนี้ตัวอย่างส่วนใหญ่แม้แต่คนที่เป็นทางการจากพวก Spring ก็แสดงวิธีการทำงานนี้ คำถามของฉันคือ: โมเดลโดเมนโลหิตจางยังถือว่าเป็น antipattern หรือไม่? เราทุกคนทำสิ่งต่าง ๆ (เกี่ยวกับ DDD) ผิดหรือเปล่า? คุณไม่คิดว่าการมีโมเดล Rich Domain ละเมิดหลักการของ SOLID หรือไม่

7
นี่คือ "รูปแบบต่อต้าน" และฉันควรหยุดใช้หรือออกแบบที่ฉลาดนี้หรือไม่?
ฉันมักจะทำต่อไปนี้เมื่อสร้างบริการ REST: มีการร้องขอ HTML บริการส่งคืนหน้าเว็บที่ต้องการ แต่ไม่มี "ทรัพยากร" ที่ร้องขอเช่น ข้อมูล หน้าเว็บมี JavaScript ที่ออกคำขอ AJAX ไปยังบริการเดียวกัน (ประเภทเนื้อหาที่แตกต่างกัน) บริการจะส่งคืนข้อมูลจริง (JSON) และหน้าแสดงข้อมูลนั้น ในอีกด้านหนึ่งดูเหมือนว่าไม่มีประสิทธิภาพ (2 คำขอ) แต่หลังจากนั้นฉันก็ใช้สิ่งนี้ "ประสิทธิภาพการทำงานไม่มีความกังวล" หมายถึงแอพภายในที่มีปริมาณการใช้งานต่ำและเว็บไซต์ง่ายและโหลดเร็ว เหตุผลที่ฉันลงเอยด้วยเหตุผลนี้ก็คือหน้าเว็บนั้นเกือบจะบริสุทธิ์ Html + JavaScript และแทบจะไม่จำเป็นต้องมีสิ่งที่ฝั่งเซิร์ฟเวอร์โดยเฉพาะอย่างยิ่งไม่มีการวนซ้ำเพื่อสร้างตารางและสิ่งต่าง ๆ เช่นนั้น (ซึ่งฉันคิดว่าน่าเกลียดมาก เช่น slickgrid) เช่นการแยกข้อมูลและมุมมอง ตอนนี้ก่อนที่ฉันจะใช้สิ่งนี้เป็นความคิดที่ดีหรือฉันควรหยุดทำหรือไม่

3
มีรูปแบบการต่อต้านอย่างเป็นทางการเพื่ออธิบายสถานการณ์หรือไม่
มีการเขียนโค้ดบางส่วนเพื่อสร้าง Excel Spreadsheets (Office Interop) รหัสมีประสิทธิภาพต่ำมาก ระบบย่อยถูกออกแบบมาเพื่อสร้างไฟล์ในเวลากลางคืน การแสดงไม่ได้เป็นความกังวลในเวลากลางคืน ฟังก์ชั่นถูกสร้างขึ้นเพื่อเลือกไฟล์ที่ถูกต้องจาก 100 ไฟล์ที่แตกต่างกันขึ้นอยู่กับชุดของพารามิเตอร์ที่เลือก เนื่องจากมีฟิสิคัลไฟล์อยู่ระบบเก็บถาวรถูกเพิ่มเพื่อสำรองไฟล์เหล่านี้ (ไม่มีเหตุผลที่จะเก็บถาวรไฟล์เหล่านี้ควรถูกสร้างขึ้นทันที) ระบบนี้ไม่รวมไฟล์กำหนดค่า แต่มีฟังก์ชั่น "ตัวเลือกเซิร์ฟเวอร์" ที่เขียนโค้ดแบบยากซึ่งจะสะท้อนให้เห็นถึงเซิร์ฟเวอร์ที่โค้ดทำงานอยู่ งานที่กำหนดเวลาไว้เป็นสิ่งจำเป็นในการสนับสนุนและเรียกใช้บริการนี้ สิ่งนี้ทำให้เดือดร้อนเป็นปัญหาเดียว รหัสต้นฉบับทำงานได้ไม่ดีเกินกว่าที่จะเรียกใช้ในสภาพแวดล้อมการใช้งานจริงได้ หากปัญหาด้านประสิทธิภาพได้รับการแก้ไขแล้วระบบย่อยและระบบการเก็บถาวรในภายหลัง "ฟังก์ชั่นตัวเลือกไฟล์จากโรงงาน" จุดความล้มเหลวที่กำหนดรหัสไว้อย่างแน่นหนาและการบำรุงรักษางานที่กำหนดเวลาไว้และจุดเพิ่มของความล้มเหลว นี่คือ "ความล้มเหลวแบบเรียงซ้อน" หากคุณต้องการ ปัญหาเดิมนำไปสู่รหัสที่ไม่ดีมากขึ้นการแก้ปัญหาที่ไม่ดีและค่าใช้จ่ายที่ไม่จำเป็น มีรูปแบบการต่อต้านอย่างเป็นทางการหรือคำทั่วไปที่จะอธิบายหรือไม่

7
การละเมิดหลักการแห้ง
ฉันแน่ใจว่ามีชื่อสำหรับรูปแบบการต่อต้านนี้อยู่ที่ไหนสักแห่ง; อย่างไรก็ตามฉันไม่คุ้นเคยกับวรรณกรรมต่อต้านรูปแบบที่จะรู้ พิจารณาสถานการณ์สมมติต่อไปนี้: or0เป็นฟังก์ชั่นสมาชิกในชั้นเรียน ดีขึ้นหรือแย่ลงมันขึ้นอยู่กับตัวแปรของสมาชิกในคลาสเป็นอย่างมาก Programmer A มาพร้อมและต้องการฟังก์ชั่นที่ต้องการor0แต่แทนที่จะเรียกใช้or0Programmer A คัดลอกและเปลี่ยนชื่อคลาสทั้งหมด ฉันเดาว่าเธอจะไม่โทรor0เพราะอย่างที่ฉันพูดมันขึ้นอยู่กับตัวแปรของสมาชิกในการทำงาน หรือบางทีเธออาจเป็นโปรแกรมเมอร์รุ่นเยาว์และไม่รู้วิธีโทรจากรหัสอื่น ดังนั้นตอนนี้เรามีor0และc0(c สำหรับการคัดลอก) ฉันไม่สามารถทำข้อผิดพลาดของโปรแกรมเมอร์ A อย่างสมบูรณ์สำหรับวิธีการนี้ - เราทุกคนอยู่ภายใต้กำหนดเวลาที่ จำกัด และเราแฮกรหัสเพื่อให้งานเสร็จสมบูรณ์ โปรแกรมเมอร์หลายรักษาดังนั้นก็ตอนนี้รุ่น or0 เป็นรุ่นแล้ว น่าเสียดายที่โปรแกรมเมอร์ส่วนใหญ่ที่ดูแลชั้นเรียนที่ดูเหมือนจะไม่รู้อย่างสมบูรณ์ - ซึ่งเป็นหนึ่งในข้อโต้แย้งที่แข็งแกร่งที่สุดที่ฉันสามารถคิดได้สำหรับภูมิปัญญาของหลักการ DRY และอาจมีการบำรุงรักษาโค้ดอิสระด้วย ทั้งสองวิธีก็ปรากฏว่าและได้รับการดูแลเป็นอิสระจากกัน และสุขและความสุขมีข้อผิดพลาดเกิดขึ้นในที่ไม่ได้เกิดขึ้นใน orNc0cNor0c0cor0c0cNorN ดังนั้นฉันมีคำถามสองสามข้อ: 1. ) มีชื่อสำหรับรูปแบบการต่อต้านนี้หรือไม่? ฉันเคยเห็นสิ่งนี้เกิดขึ้นบ่อยครั้งฉันพบว่ามันยากที่จะเชื่อว่านี่ไม่ใช่การต่อต้านแบบ 2. ) ฉันเห็นทางเลือกไม่กี่อย่าง: a.) แก้ไขorNเพื่อรับพารามิเตอร์ที่ระบุค่าของตัวแปรสมาชิกทั้งหมดที่ต้องการ จากนั้นแก้ไขcNเพื่อโทรorNด้วยพารามิเตอร์ที่จำเป็นทั้งหมดที่ส่งผ่านเข้ามา ข.) พยายามที่จะแก้ไขพอร์ตด้วยตนเองจากการorN cN(ใจคุณฉันไม่ต้องการทำสิ่งนี้ แต่เป็นไปได้จริง) c.) คัดลอกorNไปที่cN--again, yuck …

1
ชั้นกาวหรือการจัดการทำอะไรมากเกินไปเมื่อไหร่?
ฉันมีแนวโน้มที่จะสร้างชั้นเรียนแบบรวมศูนย์ที่จัดการชั้นเรียนอื่น ๆ ในการออกแบบของฉัน มันไม่ได้เก็บข้อมูลทุกอย่าง แต่คำขอข้อมูลส่วนใหญ่จะไปที่ "ผู้จัดการ" ก่อน ในขณะที่ดูคำตอบสำหรับคำถามนี้ฉันสังเกตเห็นคำว่า "God Object" Wikipedia ระบุว่าเป็น antipattern เข้าใจได้ เส้นแบ่งระหว่างคลาสกาวที่ถูกต้องหรือโมดูลที่ส่งผ่านข้อมูลและข้อความจากที่หนึ่งไปยังอีกที่หนึ่งและคลาสที่ทำมากเกินไป

3
สำหรับถ้า antipattern
ฉันอ่านโพสต์บล็อกนี้เกี่ยวกับรูปแบบการต่อต้านถ้าและฉันค่อนข้างแน่ใจว่าฉันเข้าใจว่าทำไมมันเป็นรูปแบบการต่อต้าน foreach (string filename in Directory.GetFiles(".")) { if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase)) { return new StreamReader(filename); } } คำถามที่ 1: เป็นเพราะreturn new StreamReader(filename);ภายในfor loop? หรือความจริงที่ว่าคุณไม่จำเป็นต้องforวนซ้ำในกรณีนี้ ในฐานะผู้เขียนบล็อกชี้ให้เห็นว่ารุ่นที่บ้าน้อยกว่านี้คือ: if (File.Exists("desktop.ini")) { return new StreamReader("desktop.ini"); } ทั้งประสบจากสภาพการแข่งขันเพราะถ้าไฟล์ถูกลบออกก่อนที่จะสร้างของคุณจะได้รับStreamReaderFile­Not­Found­Exception คำถามที่ 2: ในการแก้ไขตัวอย่างที่สองคุณจะเขียนใหม่โดยไม่มีคำสั่ง if และล้อมรอบStreamReaderด้วยบล็อก try-catch แทนและถ้ามันโยนFile­Not­Found­Exceptionคุณจัดการมันในcatchบล็อกตามนั้นหรือไม่

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