Saya sedang membangun aplikasi dalam PHP, menggunakan Zend Framework 1 dan Doctrine2 sebagai lapisan ORM. Semua berjalan baik. Sekarang, saya kebetulan melihat bahwa baik ZF1 dan Doctrine2 datang dengan, dan bergantung pada, implementasi caching mereka sendiri. Saya telah mengevaluasi keduanya, dan sementara masing-masing memiliki pro dan kontra, tidak satu pun dari mereka menonjol sebagai yang lain untuk kebutuhan sederhana saya. Kedua perpustakaan juga tampaknya ditulis terhadap antarmuka masing-masing, bukan implementasinya.
Alasan mengapa saya merasa ini adalah masalah adalah bahwa selama bootstrap aplikasi saya, saya harus mengkonfigurasi dua driver caching - masing-masing dengan sintaksnya sendiri. Ketidakcocokan mudah dibuat dengan cara ini, dan rasanya tidak efisien untuk mengatur dua koneksi ke backend caching karena ini.
Saya mencoba menentukan apa jalan terbaik ke depan, dan akan menyambut wawasan apa pun yang Anda bisa tawarkan.
Apa yang saya pikirkan sejauh ini adalah empat opsi:
- Jangan lakukan apa-apa, terima bahwa ada dua kelas yang menawarkan fungsionalitas caching.
- Buat kelas Facade untuk menempelkan antarmuka Zend ke implementasi caching Doctrine.
- Opsi 2, sebaliknya - buat Facade untuk memetakan antarmuka Doctrine pada backend Zend Framework.
- Gunakan multiple-interface-inheritance untuk membuat satu antarmuka untuk mengatur semuanya, dan berdoa agar tidak ada tumpang tindih (yaitu: jika keduanya memiliki metode "save", mereka harus menerima params dalam urutan yang sama karena PHP kurangnya polimorfisme yang tepat).
Opsi apa yang terbaik, atau adakah varian "Tidak satu pun di atas" yang tidak saya sadari?
Jawaban:
Jangan apa-apa Terima bahwa proyek terpisah dapat memiliki redundansi selama mereka bekerja di ruang mereka sendiri (tidak saling mencemari cache). Doktrin tahu Zend memiliki caching tetapi mereka tidak ingin bergantung pada Zend dan sebaliknya. Tidak semua orang ingin menggunakan Zend dan Doktrin.
Saya akan membiarkan kode Doktrin menggunakan barangnya sendiri dan menggunakan ZF untuk yang lainnya. Dengan cara ini saya hanya perlu tahu kelas ZF. Cache doktrin hanya boleh digunakan secara internal oleh doktrin untuk objek basis data. ZF memiliki lebih banyak ujung depan yang berguna di luar ORM, seperti ujung depan halaman caching html.
Membuat layer lain akan ideal tetapi akan menambah ketergantungan pada proyek, jadi tidak terlalu baik untuk pemeliharaan.
Saya tahu bahwa di bootstrap dapat terlihat berlebihan untuk mengatur beberapa cache. Ini bisa menjadi lebih buruk jika Anda mencoba menggunakan ZF1, Doctrine dan ZF2 secara bersamaan. Tetapi ini adalah waktu konstan yang sangat kecil karena mereka hanya mengatur variabel, belum terhubung ke ujung belakang.
Jadi, dari perspektif pemrograman, pemeliharaan dan operasi, saya hanya akan membiarkannya.
sumber
Mengapa tidak mengatasi masalah dari sudut pandang "buat konfigurasi lebih mudah"?
Dengan kata lain, tulis beberapa kelas baru yang menerima data konfigurasi Anda, dan kemudian terapkan pada kedua driver caching. Tentu, ini tidak fleksibel, tetapi itu juga berarti lebih sedikit kesalahan.
sumber
Mengapa tidak membuat abstraksi antarmuka Anda yang dapat dikhususkan untuk masing-masing kerangka kerja? Saya akan menulis Controller cache saya sendiri dengan metode yang saya butuhkan, yang akan merangkum kedua cache. Maka saya bisa melupakan mereka dan hanya berbicara dengan Pengendali saya. Adakah masalah dengan solusi itu?
sumber