Bir veritabanıyla çalışmak, ancak birimlerin test edilebilirliğini sağlamak için bazı OOP stratejileri nelerdir? Bir Kullanıcı sınıfım olduğunu ve üretim ortamımın MySQL ile çalıştığını varsayalım. Burada PHP kullanarak gösterilen birkaç olası yaklaşımlar görüyorum:
Arka uç veri kaynağını soyutlamak için
load()
ve arayüzlerine sahip bir $ data_source iletinsave()
. Test yaparken farklı bir veri deposu geçirin.$ user = yeni Kullanıcı ($ mysql_data_source); $ user-> load ('bob'); $ user-> setNickname ('Robby'); $ Kullanıcı-> save ();
Veritabanına erişen ve sonuç satırını Kullanıcının yapıcısına geçiren bir fabrika kullanın. Test ederken, $ row parametresini el ile oluşturun veya nesneyi UserFactory :: $ data_source içinde alay edin. (Kayıttaki değişiklikleri nasıl kaydedebilirim?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
Yanımda Tasarım Desenleri ve Temiz Kod var, ancak uygulanabilir kavramları bulmakta zorlanıyorum.