SORU
7 ŞUBAT 2011, PAZARTESİ


Doktrini 2 Vekil nedir?

Ben okumayı yeni bitirdim tüm Doktrini 2 belgeleri, başladım kendi kendime kum, anladım çoğu principes, ama orada hala bir soru ve ben hiç bulamadım tam açıklama doktor.

  1. Ne Proxy sınıflar?
  2. Ne zaman varlıklar üzerinde onları kullanmalı mıyım?

Anladığım kadarıyla, proxy sınıfları kendi varlıkları için başka özellikler eklemek için bir katman ekleyin, ama neden varlık sınıfındaki yöntemler kendilerini uygulamak yerine bir proxy kullan?

CEVAP
7 ŞUBAT 2011, PAZARTESİ


Proxy nesneleri sorgunuz tüm verileri bir varlık yaratmak için gerekli geri dönmediği zaman kullanılır. Aşağıdaki senaryoyu düşünün:

@Entity
class User {
     @Column protected $id;
     @Column protected $username;
     @Column protected $firstname;
     @Column protected $lastname;

     // bunch of setters/getters here
}

DQL query:

SELECT u.id, u.username FROM Entity\User u WHERE u.id = :id

Bu sorgu firstname lastname özellikleri dönüş yok gördüğünüz gibi, bu nedenle User nesne oluşturun. Eksik varlığın yaratılış beklenmeyen hatalara neden olabilir.

Bu Doktrini tembel yükleme destekler UserProxy nesne oluşturur. firstname özellik yüklü değil) erişmek için çalışacaksın ilk ne zaman veritabanından bu değeri yük.


Yani neden bir proxy kullanmalıyım ?

Her zaman eğer proxy nesneleri kullanmak sormaman olarak kodunuzu yazmanız gerekmektedir. İç nesneleri tarafından kullanılan Doktrini olarak tedavi edilebilir.

Neden tembel yükleme Taraf içinde uygulanabilir mi kendisi?

Teknik olarak olabilir, ama rastgele bir proxy nesne sınıfının bir göz atın. Kirli kod, ah dolu. Güzel varlıklar, temiz bir kod var.

Bana bir dava verebilir misiniz?

Listenin son 25 makaleler gösteriyorsunuz ve detayları ilk bir görüntü. Her biri büyük miktarda metin, veri Hafıza kaybı olacağını tüm getirilirken çok içerir. Gereksiz veri getirmek istemiyorum.

SELECT a.title, a.createdAt
FROM Entity\Article a
ORDER BY a.createdAt DESC
LIMIT 25

$isFirst = true;
foreach ($articles as $article) {
    echo $article->getTitle();
    echo $article->getCreatedAt();

    if ($isFirst) {
        echo $article->getContent(); // Article::content is not loaded so it is transparently loaded 
                                     // for this single article.

        $isFirst = false;
    }
}

GÜNCELLEME

Aşağıdaki yorum bölümünde, proxy nesneleri ve kısmi nesneler arasındaki farklar hakkında yanlış bilgiler var. Daha fazla bilgi için bkz: @Kontrollfreak cevap: http://stackoverflow.com/a/17787070/252591

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • FND Films

    FND Films

    2 Mayıs 2006
  • My name is Festis and I'm free

    My name is F

    2 EKİM 2011