Iyi veya kötü uygulama - Bir başka DAO içinde DAO kullanarak?

1 Cevap php

Bu çok önemsiz bir şey olabilir, ama bazı Object-Oriented desenleri ile bir acemi değilim.

Kısacası, başka DAO'sunda bir DAO yöntemleri kullanmak için kötü bir uygulamadır? Ben bir DAO içinde bir varlık oluşturmak ve çok zor bu varlık oluşturmak için bulmaya çalışıyorum using just that DAO. Yani, diğer DAO içindeki diğer DAO yöntemleri kullanmak için ok?

Örnek:

public function readAllUsers() {
    $sql = "SELECT * FROM user";
    return $this->execute($sql);
}

public function execute($sql) {
$result = mysql_query($sql, $this->getDBConnection())
                or die(mysql_error());
    $user = array();
    if(mysql_num_rows($result) > 0) {
        for($i = 0; $i < mysql_num_rows($result); $i++) {
            $row = mysql_fetch_assoc($result);
            $user[$i]->setUsername(row["userName"]);
             ...set user info...
            $user[$i]->setAddresses($addressDAO->readAddressByUserId($userId));
        }
    }
    return $user;
}

NOTE: işletmenin kendisi (adresler, e-postalar, telefon numaraları, vb) ile bir-çok ilişkisi olan kullanıcı varlık bu gibi özellikleri iyi bir bit vardır. (Kullanılan tüm bağlama tablolarla) gerekli olacaktır, sorgu son derece karmaşık olacaktır.

Teşekkürler,

Steve

1 Cevap

Hayır, ben bunu hiç böyle yapmazdı.

Eğer bir-çok ilişki modeli istediğiniz gibi geliyor, bu yüzden umut birçok nesneleri almak ve daha sonra bunları bir tek eşlemek için iç DAO kullanmaktır.

O günaha karşı.

Sizin kod söyler neden:

  1. Dış döngü bir-çok ilişkisi N nesnelerini geri getiriyor.
  2. İç döngü N nesnelerin her biri için bir kez sorgular ve bağımlılıkları geri getiriyor.

Klasik çaylak N +1 sorgu hatası. Ağ gecikme büyük N. seni öldürecek

Yapılacak doğru şey bir kerede geri tüm verileri getiriyor ve söz konusu nesne (ler) içine haritasına bir sorgu yapmaktır.

Belki Hibernate gibi ORM aracı iyi bir uyum olacaktır. Eğer 1 sürü varsa: m ilişkiler, Hazırda gibi iyi ya da verimli SQL üreten daha iyi bir iş olacak daha yapacağını bahse girerim.