Saya agak bingung tentang bagaimana prinsip Open Closed dapat diterapkan dalam kehidupan nyata. Persyaratan dalam setiap bisnis berubah dari waktu ke waktu. Menurut prinsip Open-Closed Anda harus memperluas kelas alih-alih memodifikasi kelas yang ada. Bagi saya setiap kali memperpanjang kelas sepertinya tidak praktis untuk memenuhi persyaratan. Biarkan saya memberi contoh dengan sistem pemesanan kereta.
Dalam sistem pemesanan kereta akan ada objek Tiket. Mungkin ada berbagai jenis tiket Tiket Reguler, Tiket Konsesi dll. Tiket adalah kelas abstrak dan RegularTicket dan ConcessionTickets adalah kelas konkret. Karena semua tiket akan memiliki metode PrintTicket yang umum, maka itu ditulis dalam Tiket yang merupakan kelas abstrak dasar. Katakanlah ini bekerja dengan baik selama beberapa bulan. Sekarang persyaratan baru datang, yang menyatakan untuk mengubah format tiket. Mungkin beberapa bidang lagi ditambahkan pada tiket yang dicetak atau mungkin formatnya diubah. Untuk memenuhi persyaratan ini, saya memiliki opsi berikut
- Ubah metode PrintTicket () di kelas abstrak Tiket. Tetapi ini akan melanggar prinsip Open-Closed.
- Mengganti metode PrintTicket () di kelas anak tetapi ini akan menduplikasi logika pencetakan yang melanggar prinsip KERING (Jangan ulangi sendiri).
Jadi pertanyaannya adalah
- Bagaimana saya dapat memenuhi persyaratan bisnis di atas tanpa melanggar prinsip Terbuka / Tertutup.
- Kapan kelas seharusnya ditutup untuk modifikasi? Apa kriteria untuk mempertimbangkan kelas ditutup untuk modifikasi? Apakah setelah implementasi awal kelas atau mungkin setelah penyebaran pertama dalam produksi atau mungkin sesuatu yang lain.