2012-02-22 38 views
8

Projemin çeşitli sınıflar (çoklu argümanlar, bazı zorunlu, bazı isteğe bağlı, vs.) için Oluşturucu desen kullanın. Bu sınıflar değişmezdir (koleksiyon alıcıları için ayarlayıcılar, derin kopyalar yoktur). Oluşturucu Desen ve Sebat

şimdi varsayılan kurucu + belirleyiciler ile nesneleri kuran bir kalıcılık çerçevesini kullanarak bir veritabanında bu nesneleri depolamak için çalışıyorum. Yapımcılarımı çok sevmiyor!

Ben POJOs bu kurulum aşağılamak ve güncel tasarım (esneklik, değişmezlik, inşaat güvenliği) avantajlarını kaybetmek istemiyoruz.

Bu durumda kullanılabilecek geçici çözümler üzerinde herhangi bir geri bildirim bekleriz (Ben bu sınıfların her biri sarmak olabilir ama bu sınıfların sayısını iki katına olurdu ve doğrusu bu önleyeceğini).

bir post aslında işaret eden Oluşturucu desen belirli bir dezavantaj olarak.

DÜZENLEME

Bir answer özel yapıcı/ayarlayıcıları kullanmayı önermektedir ancak sınıfın alanlar benim böyle değil ki, nihai değilse sadece çalışır.

SON DÜZENLEME herkese

teşekkür ederiz.
Ne benim son çözüm bu gibi görünüyor ve (ben MongoDB + Morfin kullanıyorum kaydı için) çalışıyor olacağını düşünüyorum:

class AClass { 
    private final String aField; 
    private final AClass() { 
     aField = ""; 
    } 
    //Standard builder pattern after that - no setters (private or public) 
} 
+4

Setler ve varsayılan kurucu ekleyemezsiniz, ancak bunları özel hale getiremez misiniz? – DaveJohnston

+0

İyi bir soru - Bunu kontrol edeceğim – assylias

+0

Biliyorum, hazırda bekletme özel setler ve kurucuyu kullanabilir, sadece senin için özel bir durumun olup olmadığını merak ediyorsun. – DaveJohnston

cevap

6

benim yorumunda söylediği gibi: Bir varsayılan kurucu içerebilir ve gerekli tüm ayarlayıcılar ama onları özel yaparlar. Bu şekilde, Nesnelerinizin değişmezliğini koruyorsunuz, ancak Hazırda Bekletme gibi bir ORM, gerektiğinde yöntem/yapıcıya erişebilecektir. Başka

Herkes çok yansıma kullanarak bu yöntemleri erişmek mümkün olurdu, ama sonra onlar da yansıma kullanarak özel üye değişkenleri erişebilirler. Yani özel yöntemleri eklemek için gerçek bir dezavantaj yok.

+1

Bu alanlar kesin değilse işe yarar. Ama eğer öyleyse, açık nedenlerle varsayılan kurucu/özel belirleyicileri kullanamıyorum. – assylias

+3

Kalıcılık çerçevesi özel bir kurucuya erişmek için yansıma kullanıyorsa, sınıf alanlarını doğrudan ayarlayabilmelidir. Bu alanlar son olsa bile çalışır. – TDJoe

+1

Alanları kesin olarak ayarlamak, bir Nesneyi değiştirilemez hale getirmenin bir parçasıdır, ancak Nesneyi mutasyona sokmak için herhangi bir kamu yöntemi yoksa, alanların nihai hale getirilmesine gerek var mı? Yanlışlıkla kendinizi sınıfta içsel yöntemlerde değiştirmediğinizden başka? – DaveJohnston