SORU
17 Mayıs 2010, PAZARTESİ


Bina büyük, kurucular uzun parametre listeleri zorunda kullanmadan sabit nesneler

Ve değişmez olabilir hangi büyük (3'ten fazla alan) bazı Nesneler var. Her zaman uzun parametre listeleri ile yapıcı iğrençlikleri oluşturmak eğiliminde olduğunu vaka ile karşılaştım. Doğru, zor kullanmaktır gelmiyor ve okunabilirlik uğrar.

Eğer alanları listeler gibi toplama türü bir tür ise daha kötü. addSibling(S s) bir basit nesne oluşturma çok kolay olurdu ama nesne değişken oluşturur.

Böyle bir durumda siz ne kullanıyorsunuz? Üzerinde Scala ve Java çalışıyorum, ama sorun dil, nesne yönelimli olduğu sürece agnostik olduğunu düşünüyorum.

Aklıma çözümleri:

  1. "Uzun parametre listeleri ile yapıcı iğrençlikleri"
  2. Builder Deseni

Giriş için teşekkürler!

CEVAP
17 Mayıs 2010, PAZARTESİ


Evet, hem de daha kolay okunur ve değişmez bir nesne oluşturulduğunda ister misin?

Akıcı bir arayüz benceDOĞRU YAPILIRsize yardımcı olacaktır.

Bu (sadece örnek) gibi görünecektir:

final Foo immutable = FooFactory.create()
    .whereRangeConstraintsAre(100,300)
    .withColor(Color.BLUE)
    .withArea(234)
    .withInterspacing(12)
    .build();

Yazdım"DOĞRU YAPTI"cesur en Java programcıları akıcı arayüzleri yanlış ve yöntemi ders tamamen yanlış olan bir nesne oluşturmak için gerekli olan nesne kirlettiği için.

Hile bu() tek yapı yöntem aslında bir Foo oluşturur(dolayısıyla Foo değişmez olabilir).

FooFactory.() oluşturun,whereXXX(..)vewithXXX(..)"başka bir şey". oluşturun

Başka bir FooFactory olabilir, burada bir yöntemdi.....

Sen FooFactory bu gibi görünecektir:

// Notice the private FooFactory constructor
private FooFactory() {
}

public static FooFactory create() {
    return new FooFactory();
}

public FooFactory withColor( final Color col ) {
    this.color = color;
    return this;
}

public Foo build() {
    return new FooImpl( color, and, all, the, other, parameters, go, here );
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CZTUTORIALS

    CZTUTORIALS

    28 Ocak 2011
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010