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