Apa sajakah strategi OOP untuk bekerja dengan database tetapi menjaga unit-unit dapat diuji? Katakanlah saya memiliki kelas Pengguna dan lingkungan produksi saya berfungsi terhadap MySQL. Saya melihat beberapa kemungkinan pendekatan, ditunjukkan di sini menggunakan PHP:
Masukkan $ data_source dengan antarmuka untuk
load()
dansave()
, untuk abstrak sumber backend data. Saat menguji, lewati penyimpanan data yang berbeda.$ user = Pengguna baru ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname ('Robby'); $ user-> save ();
Gunakan pabrik yang mengakses database dan melewati baris hasil ke konstruktor Pengguna. Saat menguji, secara manual menghasilkan parameter $ baris, atau mengejek objek di UserFactory :: $ data_source. (Bagaimana saya bisa menyimpan perubahan ke catatan?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
Saya memiliki Pola Desain dan Kode Bersih di sini di sebelah saya, tetapi saya berjuang untuk menemukan konsep yang berlaku.