ควรใช้รูปแบบเฉพาะที่สามารถเป็นทางออกที่ดีที่สุดหรือช่วยในการสร้างทางออกที่ดี (คุณเห็นด้วย?)
ฉันเห็นรูปแบบการออกแบบอย่างเคร่งครัดตามรายละเอียดการใช้งาน หากคุณทำเอกสารสาธารณะ API และโปรแกรมของคุณไปยังเอกสารนั้นโดยทั่วไปจะไม่สำคัญ (หรือส่งผลกระทบต่อคุณมาก) ซึ่งคุณมีรูปแบบการออกแบบ นั่นคือคุณไม่ไป "ฉันมีรูปแบบสะพานที่นี่และฉันจะใช้ผู้เข้าชมด้านบนของมัน" แต่มันคือ "คลาสนี้จะมีการใช้งานที่แตกต่างกันในระบบปฏิบัติการต่าง ๆ ดังนั้นมันจะถูกนำมาใช้โดยใช้รูปแบบบริดจ์" จากนั้นเมื่อคุณใช้คุณจะไม่สนใจมันที่ถูกนำไปใช้เป็นบริดจ์ - เนื่องจากคุณดู API สาธารณะไม่ใช่รูปแบบบริดจ์
เราควรลงทุนในการสร้างการออกแบบที่ยืดหยุ่น
การเชื่อมต่อแบบหลวมสามารถทำได้โดยทำตามกฎง่ายๆ หากคุณเคารพในสิ่งเหล่านี้โค้ดของคุณจะถูกผนวกเข้าด้วยกันอย่างหลวม ๆ ขณะที่คุณเขียน (เช่นความพยายามใด ๆ ที่เป็นส่วนหนึ่งของกระบวนการพัฒนาอยู่แล้ว)
ท่ามกลางกฎ (ไม่ใช่รายการที่ครบถ้วนสมบูรณ์):
- กำหนดอินเทอร์เฟซของคุณโดยการคิด (หรือการเขียน) รหัสลูกค้า (วิธีใช้คลาส) ไม่ใช่สิ่งที่คลาสจะทำ (เช่นการออกแบบอินเตอร์เฟสไม่ใช่การใช้งาน)
- "บอกไม่ต้องถาม"
- สร้างวัตถุจากชิ้นส่วนที่สร้างไว้แล้ว
- ส่งผ่านคอนสตรัคเตอร์วัตถุจริงที่คุณจะใช้ (ไม่ใช่โรงงานสำหรับสมาชิกพารามิเตอร์สำหรับโรงงานของพารามิเตอร์หรืออะไรทำนองนั้น)
- แห้ง (หากคุณมีสองบรรทัดที่ปรากฏในลำดับเดียวกันในสองแห่งให้แยกออกเป็นฟังก์ชันแยกต่างหากและอื่น ๆ )
- หากการสร้างวัตถุเป็นการดำเนินการที่ซับซ้อนมากขึ้นให้ใช้การสร้างชิ้นส่วนตัวกลางเป็นวิธีการ / คลาสจากโรงงาน (เช่นไม่ได้อยู่ในเนื้อความของตัวสร้าง)
- YAGNI (สร้างสิ่งที่คุณต้องการไม่ใช่มาก่อน)
กฎเหล่านี้มีการปฏิบัติแตกต่างกันไปตามภาษาวิธีการพัฒนาตามด้วยทีมของคุณ (เช่น TDD) ข้อ จำกัด ด้านงบประมาณและอื่น ๆ
ตัวอย่างเช่นใน Java เป็นแนวปฏิบัติที่ดีในการกำหนดอินเทอร์เฟซของคุณเป็นinterface
และเขียนรหัสไคลเอนต์บนนั้น (จากนั้นอินสแตนซ์อินเทอร์เฟซที่มีคลาสการใช้งาน)
ใน C ++ คุณไม่มีอินเทอร์เฟซดังนั้นคุณสามารถเขียนอินเทอร์เฟซเป็นคลาสพื้นฐานแบบนามธรรมเท่านั้น เนื่องจากใน C ++ คุณใช้การสืบทอดเมื่อคุณมีข้อกำหนดที่เข้มงวดเท่านั้น (และหลีกเลี่ยงโอเวอร์เฮดของฟังก์ชันเสมือนที่ไม่จำเป็น) คุณอาจไม่ได้กำหนดอินเตอร์เฟสแยกต่างหาก
ผู้ที่คัดค้านรูปแบบการออกแบบบอกว่าค่าใช้จ่ายในการใช้รูปแบบเหล่านี้มักจะมากกว่าประโยชน์
ฉันคิดว่าพวกเขาทำผิด หากคุณเขียนโค้ดแบบคู่ (และ DRY) แบบหลวม ๆ การรวมรูปแบบการออกแบบเข้ากับมันจะมีความพยายามเพิ่มขึ้นเล็กน้อย มิฉะนั้นคุณจะต้องปรับรหัสของคุณสำหรับการนำรูปแบบการออกแบบมาใช้
หากคุณต้องทำการเปลี่ยนแปลงจำนวนมากเพื่อนำรูปแบบการออกแบบมาใช้ปัญหาของคุณไม่ใช่รูปแบบการออกแบบซึ่งเป็นฐานรหัสของคุณที่มีขนาดใหญ่มาก นี่เป็นปัญหาการออกแบบที่ไม่ดี / ไม่ดีไม่ใช่ปัญหาของรูปแบบการออกแบบ
สิ่งที่ฉันอยากรู้คือฉันควรใช้ความพยายามในการสร้างระดับนามธรรมและการออกแบบเพิ่มเติมเพียงใดเพื่อให้แอปพลิเคชันของฉันปฏิบัติตามหลักการ OO เช่นข้อต่อหลวมการเขียนโปรแกรมเข้าสู่อินเตอร์เฟส ฯลฯ คุ้มหรือไม่ มัน? ฉันควรใช้ความพยายามมากแค่ไหนในเรื่องนี้?
คำถามของคุณทำให้สมมติฐาน (ไม่ระบุ) ว่าข้อได้เปรียบเพียงข้อเดียวของข้อต่อหลวมคือความสามารถในการใช้รูปแบบการออกแบบได้อย่างง่ายดาย มันไม่ใช่.
ประโยชน์ของการแต่งงานกันคือ:
- การสร้างใหม่และความยืดหยุ่นในการออกแบบใหม่
- เสียความพยายามน้อยลง
- การตรวจสอบได้
- เพิ่มความเป็นไปได้ในการใช้รหัสซ้ำ
- การออกแบบที่เรียบง่าย
- ใช้เวลาน้อยลงในตัวดีบัก
... และอีกสองสามคนที่ไม่ได้มาในความคิดของฉันในขณะนี้