Veri Erişim Katmanı, En İyi Uygulamalar

2 Cevap php

Benim PHP tabanlı web uygulaması veri erişim katmanı (DAL) refactor iyi yolu girişi arıyorum. MVC deseni izleyin: PHP / HTML / CSS / vb. ortasında ön uç, PHP kontrolörleri / hizmet ve modelde bir ilişkisel veritabanı üstüne oturan bir PHP DAL bakıldı. Oldukça standart şeyler. Yapılacak iyi çalışıyor, ama benim DAL büyük oluyor (codesmell?) Ve biraz hantal haline geliyor.

Benim DAL hemen hemen tüm mantığı benim veritabanı arayüzü içeriyor ve bu gibi bakmak fonksiyonları dolu:

function getUser($user_id) {
   $statement = "select id, name from users where user_id=:user_id";
   PDO builds statement and fetchs results as an array
   return $array_of_results_generated_by_PDO_fetch_method;
}

Notlar:

  • Benim denetleyicisi mantık sadece model DAL yukarıdaki gibi fonksiyonları kullanarak etkileşimde
  • I am not using a framework (I'm of the opinion that PHP is a templating language and there's no need to inject complexity via a framework)
  • I generally use PHP as a procedural language and tend to shy away from its OOP approach (I enjoy OOP development but prefer to keep that complexity out of PHP)

DAL bu noktaya ulaştığında zaman ne yaklaşımlar almış? Ben temel bir tasarım sorunu var mı? Ben sadece daha küçük dosya sayısı (mantıksal bölmek) içine benim DAL doğrayın gerekir mi? Teşekkürler.

2 Cevap

Lütfen mimarlık açısından, DB her tablo (genellikle) Bunu yapmıyor eğer, o zaman sana bir kod kokusu var derim, kendi modelini (PHP sınıfı) sahip olmalıdır.

Bir model olarak, her tablo varsa, o zaman ben her sınıfta kod miktarı dert olmaz. Bu "yağ modelleri" ve "sıska denetleyicileri" olması iyi.

Eğer ince bazı kod istedim, hafif bir veri nesnesi sarıcı, ARMUT en DB_DataObject gibi bir şey kullanabilirsiniz. Bir DB_DataObject modeli gibi görünebilir, ne bir kaç örnek:


$user = new User;
$user->get($user_id);

$user = new User;
$user->name = 'foo';
$user->find();
while($user->fetch()) {
...
}

DB_DataObject gibi bir şey kullanmanın yararı düşük seviye PDO malzeme ve sınıf uygulamasının bir çok iş mantığı üzerinde daha fazla durulacak uzakta soyut.

Belki sordu gerçek soruda biraz digressing, ama Toon Koppelaars, oldukça yetkin Oracle DB chap tarafından bir dizi sunum ilginizi çekebilir, yazılım mimarisi hakkında, bilinen "Helsinki Deklarasyonu" olarak (ya da ben ne yazık ki, bilinmeyen demeliyim) .

Bkz http://thehelsinkideclaration.blogspot.com/2009/03/helsinki-declaration-observation-1.html

Bu belki biraz yanlara, dokunuyor, ama ağır herhangi bir oranda, soru hakkında gerçekten konuyla ilgili.