Saya harus mencatat beberapa peristiwa dalam suatu program tetapi sejauh yang saya tahu akan lebih baik untuk menyimpan kode logging di luar program karena ini bukan tentang fungsionalitas sebenarnya dari program. Jadi dapatkah Anda memberi tahu saya jika saya harus menyimpannya sepenuhnya di luar kode dan hanya menggunakan Pengamat dan Pendengar untuk mencatat acara? Atau saya dapat menambahkan sederet kode seperti berikut ini di mana pun saya perlu mencatat sesuatu:
MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));
Apakah saya membuat kesalahan untuk menggunakan pola desain Pengamat? Saya perlu pola desain lain? Atau saya harus berhenti memikirkan pola desain?
PS1. Jika saya ingin login hanya menggunakan pendengar dan pengamat saya tentu perlu menambahkan dan meningkatkan pengamat dan pendengar program.
PS2. Saya tentu tahu bahwa ada berbagai pustaka untuk login di Jawa dan saya menggunakan java.utils.logging tetapi saya perlu memiliki pembungkus untuk itu untuk mencatat objek khusus saya.
sumber
Jawaban:
Logging
biasanya diimplementasikan dengan pola Rantai tanggung jawab . Tentu saja Anda dapat (dan saya akan) menggabungkannya dengan Facade . Saya benar-benar tidak akan menggunakan Pendengar atau Pengamat sendiri.sumber
Gunakan Pemrograman Berorientasi Aspek yang menggunakan saran Setelah, Sebelum dan Di Sekitar metode. Di sana, sesuai kebutuhan Anda, Anda dapat menambahkan log sebelum memulai api, setelah atau pada beberapa kondisi dan juga memisahkan kode utama Anda dari kode logging.
sumber
Nah, Pengamat terdengar tidak cocok untuk saya. Selain itu, melemparkan panggilan logger "di mana pun Anda membutuhkan" akan menghancurkan kode Anda dan melanggar SRP.
Anda mungkin - misalnya - tertarik pada AOP untuk ini, sehingga Anda dapat melampirkan panggilan logger melalui anotasi metode.
sumber
Rantai tanggung jawab tampaknya menjadi pola yang baik ketika output Anda dapat mendarat di banyak tempat. Di UML Anda memiliki logger yang berbeda yang mengarahkan ke konsol, yang lain ke errorFile dan ke-3 hanya info logger.
Biasanya saya telah melihat bahwa logLevel berbeda tetapi file logging sama.
Saya tidak melihat pola pengamat sebagai buruk untuk logging karena memisahkan kode logging Anda dari kode aplikasi. Ini merupakan praktik yang baik, bermigrasi ke berbagai mekanisme pembalakan mudah dengan cara ini. Setiap kali Anda ingin mencatat, jalankan suatu acara dan pendengar yang tepat akan menerima acara tersebut dan mencatatnya. Seharusnya ada objek singleton perantara yang menyimpan daftar semua register.
Dengan cara ini saya melihat bahwa kita dapat memisahkan kode logging dari kode aplikasi.
sumber