Ketika memikirkan pengembangan perangkat lunak yang gesit dan semua prinsip (SRP, OCP, ...) Saya bertanya pada diri sendiri bagaimana memperlakukan logging.
Apakah logging di sebelah implementasi merupakan pelanggaran SRP?
Saya akan mengatakan yes
karena implementasinya juga harus dapat berjalan tanpa logging. Jadi bagaimana saya bisa menerapkan logging dengan cara yang lebih baik? Saya telah memeriksa beberapa pola dan sampai pada kesimpulan bahwa cara terbaik untuk tidak melanggar prinsip-prinsip dengan cara yang ditentukan pengguna, tetapi menggunakan pola apa pun yang diketahui melanggar prinsip adalah dengan menggunakan pola dekorator.
Katakanlah kita memiliki banyak komponen tanpa pelanggaran SRP dan kemudian kita ingin menambahkan logging.
- komponen A
- komponen B menggunakan A
Kami ingin masuk untuk A, jadi kami membuat komponen lain D dihiasi dengan A keduanya mengimplementasikan antarmuka I.
- antarmuka I
- komponen L (komponen pencatatan sistem)
- komponen A mengimplementasikan I
- komponen D mengimplementasikan I, menghias / menggunakan A, menggunakan L untuk logging
- komponen B menggunakan I
Keuntungan: - Saya dapat menggunakan A tanpa pencatatan - pengujian A berarti saya tidak memerlukan cemoohan pencatatan - pengujian lebih mudah
Kerugian: - lebih banyak komponen dan lebih banyak tes
Saya tahu ini sepertinya pertanyaan diskusi terbuka lain, tetapi saya sebenarnya ingin tahu apakah seseorang menggunakan strategi logging yang lebih baik daripada dekorator atau pelanggaran SRP. Bagaimana dengan statis singleton logger yang merupakan default NullLogger dan jika syslog-logging diinginkan, seseorang mengubah objek implementasi saat runtime?