เมื่อใดก็ตามที่ฉันได้ยินเกี่ยวกับรูปแบบการต่อต้านฉันจำคำอื่น ๆ ได้แก่ กลิ่นการออกแบบ
"กลิ่นการออกแบบเป็นโครงสร้างบางอย่างในการออกแบบที่บ่งบอกถึงการละเมิดหลักการออกแบบพื้นฐานและส่งผลกระทบในเชิงลบต่อคุณภาพการออกแบบ" (จาก "การปรับเปลี่ยนใหม่สำหรับกลิ่นการออกแบบซอฟต์แวร์: การจัดการหนี้ด้านเทคนิค")
มีการออกแบบหลายกลิ่นจำแนกตามการละเมิดหลักการออกแบบ:
กลิ่นที่เป็นนามธรรม
Missing Abstraction:กลิ่นนี้เกิดขึ้นเมื่อมีการใช้กลุ่มข้อมูลหรือสตริงที่เข้ารหัสแทนการสร้างคลาสหรือส่วนต่อประสาน
สิ่งที่เป็นนามธรรมที่เป็นนามธรรม:กลิ่นนี้เกิดขึ้นเมื่อการผ่าตัดกลายเป็นชั้นเรียน
สิ่งที่เป็นนามธรรมที่ไม่สมบูรณ์:กลิ่นนี้เกิดขึ้นเมื่อสิ่งที่เป็นนามธรรมไม่สนับสนุนวิธีการเสริมหรือเกี่ยวข้องกันอย่างสมบูรณ์
Multifaceted Abstraction:กลิ่นนี้เกิดขึ้นเมื่อ Abstraction มีความรับผิดชอบมากกว่าหนึ่งรายการ
Unn นามธรรม Abstraction:กลิ่นนี้เกิดขึ้นเมื่อ Abstraction ที่ไม่จำเป็น (ซึ่งสามารถหลีกเลี่ยงได้) ได้ถูกนำมาใช้ในการออกแบบซอฟต์แวร์
Unutilized Abstraction:กลิ่นนี้เกิดขึ้นเมื่อไม่ได้ใช้สิ่งที่เป็นนามธรรม (ไม่ได้ใช้โดยตรงหรือไม่สามารถเข้าถึงได้)
Duplicate Abstraction:กลิ่นนี้เกิดขึ้นเมื่อ abstractions สองตัวขึ้นไปมีชื่อเหมือนกันหรือมีการใช้งานที่เหมือนกันหรือทั้งสองอย่าง
กลิ่นห่อหุ้ม
Encapsulation บกพร่อง:กลิ่นนี้เกิดขึ้นเมื่อประกาศการเข้าถึงของหนึ่งหรือมากกว่าหนึ่งสมาชิกของสิ่งที่เป็นนามธรรมได้รับอนุญาตมากขึ้นกว่าที่จำเป็นจริง
Encapsulation ที่รั่วไหล:กลิ่นนี้เกิดขึ้นเมื่อสิ่งที่เป็นนามธรรม“ exposes” หรือ“ รั่วไหล” รายละเอียดการใช้งานผ่านส่วนต่อประสานสาธารณะ
Encapsulation ที่ขาดหายไป:กลิ่นนี้เกิดขึ้นเมื่อรูปแบบการนำไปใช้งานไม่ได้ถูกห่อหุ้มภายในนามธรรมหรือลำดับชั้น
การห่อหุ้มแบบไม่ได้ใช้ประโยชน์:กลิ่นนี้เกิดขึ้นเมื่อรหัสลูกค้าใช้การตรวจสอบประเภทที่ชัดเจน (โดยใช้คำสั่ง if-else หรือคำสั่งสลับที่ตรวจสอบประเภทของวัตถุ) แทนที่จะใช้ประโยชน์จากรูปแบบที่ห่อหุ้มไว้แล้วภายในลำดับชั้น
การทำให้เป็นโมดูลของกลิ่น
การแยกส่วนแบบแยกส่วน:กลิ่นนี้เกิดขึ้นเมื่อข้อมูลและ / หรือวิธีการที่ควรได้รับการแปลเป็นนามธรรมเป็นสิ่งที่แยกออกจากกันและกระจายไปทั่ว abstractions หลาย
การแยกส่วนแบบไม่เพียงพอ:กลิ่นนี้เกิดขึ้นเมื่อมีสิ่งที่เป็นนามธรรมซึ่งยังไม่ได้ย่อยสลายอย่างสมบูรณ์และการย่อยสลายที่เพิ่มเติมอาจลดขนาดความซับซ้อนในการใช้งานหรือทั้งสองอย่าง
การแยกส่วนแบบแยกส่วน - ขึ้นอยู่กับกลิ่น:กลิ่นนี้เกิดขึ้นเมื่อนามธรรมสองตัวหรือมากกว่านั้นขึ้นอยู่กับกันและกันโดยตรงหรือโดยอ้อม (การสร้างการเชื่อมต่อที่แน่นหนาระหว่างนามธรรม)
Hub-Like Modularization:กลิ่นนี้เกิดขึ้นเมื่อสิ่งที่เป็นนามธรรมมีการพึ่งพา (ทั้งขาเข้าและขาออก) ที่มี abstractions อื่นจำนวนมาก
ลำดับชั้นมีกลิ่น
ลำดับชั้นที่ขาดหายไป:กลิ่นนี้เกิดขึ้นเมื่อส่วนของรหัสใช้ตรรกะตามเงื่อนไข (โดยทั่วไปจะใช้ร่วมกับ“ ประเภทที่ติดแท็ก”) เพื่อจัดการรูปแบบที่เปลี่ยนแปลงอย่างชัดเจนในพฤติกรรมที่ลำดับชั้นอาจถูกสร้างขึ้นและใช้
ลำดับขั้นที่ไม่จำเป็น:กลิ่นนี้เกิดขึ้นเมื่อลำดับชั้นการสืบทอดทั้งหมดไม่จำเป็นบ่งชี้ว่าการสืบทอดถูกนำไปใช้โดยไม่จำเป็นสำหรับบริบทการออกแบบที่เฉพาะเจาะจง
ลำดับขั้นของ Unfactored:กลิ่นนี้เกิดขึ้นเมื่อมีการทำซ้ำที่ไม่จำเป็นระหว่างประเภทในลำดับชั้น
Wide Hierarchy:กลิ่นนี้เกิดขึ้นเมื่อลำดับชั้นของการสืบทอดมีค่า“ เกินไป” ที่บ่งบอกว่าประเภทกลางอาจหายไป
ลำดับขั้นของการเก็งกำไร:กลิ่นนี้เกิดขึ้นเมื่อหนึ่งหรือมากกว่าหนึ่งชนิดในลำดับชั้นถูกจัดให้มีการเก็งกำไร (กล่าวคืออิงตามความต้องการที่จินตนาการมากกว่าความต้องการจริง)
ลำดับชั้นลึก:กลิ่นนี้เกิดขึ้นเมื่อลำดับชั้นของการสืบทอด "ลึกเกินไป"
ลำดับขั้นของการกบฏ:กลิ่นนี้เกิดขึ้นเมื่อชนิดย่อยปฏิเสธวิธีที่มีให้โดย supertype
ลำดับขั้นตอนที่ใช้งานไม่ได้:กลิ่นนี้เกิดขึ้นเมื่อ Supertype และแนวคิดย่อยไม่ได้แบ่งปันความสัมพันธ์“ IS- A” ซึ่งส่งผลให้เกิดความสามารถในการทดแทนที่ใช้งานไม่ได้
Multipath Hierarchy:กลิ่นนี้เกิดขึ้นเมื่อ subtype สืบทอดทั้งทางตรงและทางอ้อมจาก supertype ที่นำไปสู่เส้นทางการสืบทอดที่ไม่จำเป็นในลำดับชั้น
Cyclic Hierarchy:กลิ่นนี้เกิดขึ้นเมื่อ supertype ในลำดับชั้นขึ้นอยู่กับชนิดย่อยของมัน
คำจำกัดความและการจำแนกประเภทข้างต้นอธิบายไว้ใน"การปรับโครงสร้างใหม่สำหรับกลิ่นการออกแบบซอฟต์แวร์: การจัดการหนี้ด้านเทคนิค " บางแหล่งข้อมูลที่เกี่ยวข้องอื่น ๆ อาจจะพบได้ที่นี่