เวลาที่คุณต้องพิจารณาชั้นเรียนที่ตั้งใจจะขยายคือเมื่อคุณทำการวางแผนที่แท้จริงสำหรับอนาคต ฉันขอยกตัวอย่างชีวิตจริงจากการทำงานของฉัน
ฉันใช้เวลาส่วนใหญ่เขียนเครื่องมืออินเทอร์เฟซระหว่างผลิตภัณฑ์หลักของเรากับระบบภายนอก เมื่อเราทำการขายใหม่ส่วนประกอบที่สำคัญอย่างหนึ่งคือชุดของผู้ส่งออกที่ได้รับการออกแบบให้ทำงานตามช่วงเวลาปกติซึ่งจะสร้างไฟล์ข้อมูลที่มีรายละเอียดเหตุการณ์ที่เกิดขึ้นในวันนั้น ไฟล์ข้อมูลเหล่านี้จะถูกใช้โดยระบบของลูกค้า
นี่เป็นโอกาสที่ดีสำหรับการขยายชั้นเรียน
ฉันมีคลาสส่งออกซึ่งเป็นคลาสพื้นฐานของผู้ส่งออกทุกคน มันรู้วิธีเชื่อมต่อกับฐานข้อมูลค้นหาตำแหน่งที่มันเคยมีครั้งล่าสุดที่มันรันและสร้างที่เก็บถาวรของไฟล์ข้อมูลที่สร้างขึ้น นอกจากนี้ยังมีการจัดการไฟล์คุณสมบัติการบันทึกและการจัดการข้อยกเว้นง่ายๆ
นอกเหนือจากนี้ฉันมีผู้ส่งออกที่แตกต่างกันในการทำงานกับข้อมูลแต่ละประเภทบางทีอาจมีกิจกรรมของผู้ใช้ข้อมูลการทำธุรกรรมข้อมูลการจัดการเงินสดเป็นต้น
ด้านบนของสแต็กนี้ฉันวางเลเยอร์เฉพาะลูกค้าซึ่งใช้โครงสร้างไฟล์ข้อมูลที่ลูกค้าต้องการ
ด้วยวิธีนี้ผู้ส่งออกฐานจะเปลี่ยนไปน้อยมาก ผู้ส่งออกประเภทข้อมูลหลักบางครั้งมีการเปลี่ยนแปลง แต่ไม่ค่อยมีและมักจะจัดการกับการเปลี่ยนแปลงคีมาฐานข้อมูลเท่านั้นซึ่งควรแพร่กระจายไปยังลูกค้าทั้งหมด งานเดียวที่ฉันต้องทำสำหรับลูกค้าแต่ละรายก็คือส่วนหนึ่งของรหัสที่เฉพาะเจาะจงสำหรับลูกค้ารายนั้น โลกที่สมบูรณ์แบบ!
ดังนั้นโครงสร้างดูเหมือนว่า:
Base
Function1
Customer1
Customer2
Function2
...
จุดหลักของฉันคือการสร้างรหัสด้วยวิธีนี้ฉันสามารถใช้การสืบทอดเป็นหลักสำหรับการใช้รหัสซ้ำ
ฉันต้องบอกว่าฉันไม่สามารถคิดเหตุผลที่จะผ่านสามชั้นได้
ฉันใช้สองเลเยอร์หลายครั้งเช่นมีTable
คลาสทั่วไปซึ่งใช้เคียวรีตารางฐานข้อมูลขณะที่คลาสย่อยของTable
ใช้รายละเอียดเฉพาะของแต่ละตารางโดยใช้การenum
เพื่อกำหนดฟิลด์ การปล่อยให้enum
อินเทอร์เฟซที่กำหนดไว้ในTable
คลาสใช้งานได้ทุกประเภท
Open/Closed principle
ไม่ใช่Closed Principle.