Benim soru nasıl bir soyut bir uygulama modeli tabakasından bir veritabanı bağlantısı yok mu? Birincil endişe kolayca veritabanları farklı türde değiştirmek mümkün olmaktır. Belki düz bir dosya, virgülle ayrılmış veritabanı ile başlar. Sonra bir SQL veritabanı taşımak istiyoruz. Sonra sonra bir LDAP uygulama daha iyi olurdu karar. Nasıl bir kişinin kolayca böyle bir şey için planlayabilirsiniz?
Basit Örneğin, bir ilk adı, soyadı ve e-posta ile bir kullanıcı var diyelim. O (ortak örnek değişkenleri ile sorunları görmezden lütfen) gibi görünebilir temsil eden çok basit bir PHP sınıfı:
<?php
class User {
public $first;
public $last;
public $email;
}
?>
Insanlar gibi gömülü SQL sahip bir DAO sınıf var nerede sık gördük:
<?php
class UserDAO {
public $id;
public $fist;
public $last;
public $email;
public function create( &$db ) {
$sql = "INSERT INTO user VALUES( '$first', '$last', '$email' )";
$db->query( $sql );
}
}
?>
Bu gibi stratejiler ile benim sorun sizin veritabanı değiştirmek istediğinizde, 'oluşturmak, güncellemek, yük, veritabanı yeni bir tür anlaşma fonksiyonlarını silmek her DAO sınıf değiştirmek zorunda olduğunu. Eğer (Ben özellikle bir hayranı değilim ki) onları otomatik oluşturmak için bir program olsa bile, bunu şimdi çalışması yapmak için bu programı düzenlemek zorunda kalacak.
Bu nasıl işleneceğini için önerileriniz nelerdir?
Benim şu anki fikrim, DAO için süper bir sınıf, kendi oluşturduğunuz metin nesneleri oluşturmak, silmek, güncelleme, yük fonksiyonları etmektir. Ancak, bu işlevler DAO niteliklerinden dizileri almak ve sorguyu kendisi üretecektir. Bu şekilde, tek SQL oldukça çeşitli sınıflara dağılmış olan fazla SuperDAO sınıftadır. Eğer veritabanı katmanı değiştirmek istedim sonra, sadece SuperDAO sınıf sorguları oluşturur nasıl değiştirmek gerekir. Avantajları? Dezavantajları? Öngörülebilir sorunlar? Iyi, kötü ve çirkin?