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