Bagaimana Anda mengatur dan mengelola objek pembantu Anda seperti mesin database, pemberitahuan pengguna, penanganan kesalahan, dan sebagainya dalam proyek berorientasi objek berbasis PHP?
Katakanlah saya memiliki CMS PHP yang besar. CMS diatur dalam berbagai kelas. Beberapa contoh:
- objek database
- manajemen pengguna
- API untuk membuat / memodifikasi / menghapus item
- objek olahpesan untuk menampilkan pesan kepada pengguna akhir
- pengendali konteks yang membawa Anda ke halaman yang benar
- kelas bilah navigasi yang menunjukkan tombol
- objek penebangan
- mungkin, penanganan error kustom
dll.
Saya berurusan dengan pertanyaan abadi, bagaimana cara terbaik membuat objek ini dapat diakses oleh setiap bagian dari sistem yang membutuhkannya.
Apporach pertama saya, bertahun-tahun yang lalu adalah memiliki $ application global yang berisi instance yang diinisialisasi dari kelas-kelas ini.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Saya kemudian beralih ke pola Singleton dan fungsi pabrik:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
tapi saya juga tidak senang dengan itu. Tes unit dan enkapsulasi menjadi semakin penting bagi saya, dan dalam pemahaman saya, logika di balik global / lajang menghancurkan ide dasar OOP.
Maka tentu saja ada kemungkinan memberikan setiap objek sejumlah petunjuk ke objek pembantu yang dibutuhkannya, mungkin cara yang paling bersih, hemat sumber daya, dan ramah pengujian, tetapi saya ragu tentang pemeliharaan ini dalam jangka panjang.
Sebagian besar kerangka kerja PHP yang saya lihat menggunakan pola tunggal, atau fungsi yang mengakses objek yang diinisialisasi. Keduanya merupakan pendekatan yang bagus, tetapi seperti yang saya katakan, saya tidak senang dengan keduanya.
Saya ingin memperluas wawasan saya tentang pola umum apa yang ada di sini. Saya mencari contoh, gagasan tambahan dan pointer terhadap sumber daya yang membahas ini dari jangka panjang , dunia nyata perspektif.
Selain itu, saya tertarik untuk mendengar tentang pendekatan khusus, khusus, atau aneh untuk masalah ini.
$mh=&factory("messageHandler");
tidak ada gunanya dan tidak menghasilkan manfaat kinerja apa pun. Selain itu, ini tidak digunakan lagi di 5.3.