SORU
17 ŞUBAT 2011, PERŞEMBE


Uyku tembel-yük uygulama tasarımı

Spring çerçeve ve bildirimsel hareket sınır yetenekleri (örneğin, @Transactional) ile birlikte Hibernate kullanma eğilimindedir.

Hepimizin bildiği gibi, uyku gibi olmaya çalışırnon-invazivve gibişeffafmümkün olduğu, ancak bu kanıtlıyorbiraz daha zorluistihdam zamanlazy-loadedilişkiler.


Şeffaflık farklı düzeylerde tasarım seçenekleri bir dizi görüyorum.

  1. İlişkiler kurmalı tembel (, *1 ör*değil
    • Bu tembel yükleme .. tüm fikir vioalites
  2. Başlatma koleksiyonları Hibernate.initialize(proxyObj);
    • Bu DAO-kaplin nispeten yüksek anlamına gelir
    • initialize ile bir arabirim tanımlayabilirsiniz, ancak diğer uygulamalar herhangi bir eşdeğer sağlamak için garanti edilmez.
  3. Ekle işlem Model kalıcı nesneler kendilerini (dynamic proxy veya @Transactionalkullanarak)davranışları
    • Ben hiç @kalıcı nesneler kendileri için çalışan İşlem görünüyordu rağmen dinamik proxy yaklaşım denedim. Muhtemelen bu kış nedeniyle bir vekil olma işlemi.
    • Hareketleri gerçekten vuku zaman kontrol kaybı
  4. Hem tembel, tembel, e API sağlar., loadData() g loadDataWithDeps()
    • Uygulama rutin olan istihdam bilmek güçleri, daha sıkı kavrama
    • Yöntem taşma, loadDataWithA(), ...., loadDataWithX()
  5. Güç, örneğin, sadece byId() operasyon sağlayarak bağımlılıkları için arama
    • Gerektirir sürü olmayan nesne tabanlı rutinleri, örneğin, findZzzById(zid) ve z.getY() yerine getYyyIds(zid) sonra
    • Eğer hareketleri arasında büyük bir işleme yükü eğer orada bir koleksiyon tek tek her nesne getirmek için yararlı olabilir.
  6. Bir parçası olunuygulama@İşlem yerine *20 tek*
    • İç içe geçmiş hareketler Olası düşünceler
    • Gerektirir rutin işlem yönetimi (örneğin, suffiently küçük) için uyarlanmıştır
    • Büyük hareketlere neden olabilir, ancak küçük programlı etkisi
  7. *Örneğin,* 14 *21 dinamik*DAO sağlamak
    • Uygulamalar ne zaman kullanmak için hangi bilmek gerekir
  8. İşlemlerin sop türü, örneğin, operasyonları, yakalar ve gerekli işlemleri gerçekleştirmek
    • -Bayt kod manipülasyon veya proxy kullanımı gerektirir
    • İşlemler gerçekleştirildiğinde kontrol kaybı
    • Kara büyü, her zaman olduğu gibi :)

Herhangi bir seçeneği mi kaçırdım?


Hangi uygulama tasarımı lazy-loaded ilişkiler etkisini en aza indirmek için çalışırken tercih edilen yaklaşımdır?

(Oh, ve WoT için üzgünüm)

CEVAP
17 ŞUBAT 2011, PERŞEMBE


Hepimizin bildiği gibi, hazırda olmayan-invaziv ve mümkün olduğunca şeffaf olarak çalışır

İlk varsayım yanlış olduğunu söyleyebilirim. Transaparent kalıcılık uygulama her zaman varlık yaşam döngüsü ve nesne grafiği yüklenen boyutta dikkat çekmek gerekir beri bir efsane.

Hazırda düşünceler, bu nedenle eğer belirli bir işlem için bağımlılıklar belirli bir dizi gerekir, niyetin Hazırda bir şekilde ifade etmelisin okuyamaz unutmayın.

Bu açıdan, açıkça bu niyetlerini ifade çözümler (yani, 2, 4 ve 7) makul bak ve şeffaflık eksikliği yaşamazlar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★TheCrono Official Channel★

    ★TheCrono

    3 Mayıs 2014
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013