SORU
15 EKİM 2008, ÇARŞAMBA


Yöntemi-en iyi yaklaşım, tek sınıf?

Tek bir işlevi gerçekleştirmek için tasarlanmış bir sınıf var diyelim. İşlevini yerine getirdikten sonra, yok edilemez. Herhangi bir nedenle bu yaklaşımların bir tercih var mı?

// Initialize arguments in constructor
MyClass myObject = new MyClass(arg1, arg2, arg3);
myObject.myMethod();

// Pass arguments to method
MyClass myObject = new MyClass();
myObject.myMethod(arg1, arg2, arg3);

// Pass arguments to static method
MyClass.myMethod(arg1, arg2, arg3);

Farklı durumlar için kurallar elde etmeye ayrıntıları hakkında kasıtlı olarak muğlak davrandım. Ama gerçekten akılda Matematik gibi basit kütüphane fonksiyonları yoktu.(rasgele). Bazı özel ve karmaşık görevi gerçekleştirmek, ama sadece bir (kamu) yöntem bunu gerektirir sınıflar daha fazla düşünüyorum.

CEVAP
15 EKİM 2008, ÇARŞAMBA


Yardımcı program sınıfları statik yöntemler ile dolu severdim. Aksi halde fazlalık ve bakım cehenneme neden yalan civarında olacağını Yardımcısı yöntemleri büyük bir konsolidasyon yaptı. Hiçbir örnekleme, imha, Yüzbaşı'forget kullanın ateş etmek çok kolay. Bu servis odaklı mimari - sadece işlerini başka bir şey mi bu vatansız hizmetleri birçok oluşturmak ilk başta farkında olmadan benim girişimi oldu sanırım. Bir sistem ancak büyüdükçe, ejderhalar geliyor.

Polimorfizmi

Arayüz sıkıntılardan< / ^ br . Statik yöntemler mantık nedenlerle arabirimleri üzerinden tanımlanamaz. Ve statik yöntemler alamayız beri, statik sınıfları etrafında kendi arayüzü geçmek için ihtiyacımız olduğunda bir işe yaramıyor. Bu bize bir strateji desen bir parçası olarak statik sınıfları kullanmak mümkün kılar. Bazı konularda passing delegates instead of interfaces yama yapabiliriz.

Test< / ^ br . Bu temelde arayüzü sıkıntılardan yukarıda belirtilen ile el ele gider. Değişiminin uygulamaları kabiliyetimiz çok sınırlı olduğu gibi, o da sorun test kod üretim kodu değiştirmek zorunda kalacağız. Yine, onları çözeriz ama bize sadece gerçek nesneler yerine sarma kabul etmek bizim kod büyük parçaları değiştirmek gerekecek.

Teşvik lekeler< / ^ br . Gibi statik yöntemler genelde kullanılan yeni yöntemler ve yeni yöntemler genellikle olacak, farklı amaçlar edeceğiz hızlı bir şekilde sonuna kadar büyük bir sınıf dolu olmayan tutarlı işlevsellik - ideal olarak, her bir sınıf olmalı bir tek amaç içinde sistemi. Daha çok beş kez sınıfları sürece amaçlarına iyi tanımlanmış bir olurdu.

Parametre sürünme< / ^ br . Öncelikle, bu küçük sevimli ve masum statik yöntem, tek bir parametre alabilir. İşlevsellik arttıkça, yeni parametreleri bir çift ekledi. Yakında daha fazla parametre isteğe bağlı olduğunu da sözlerine ekledi, Bu yöntemi (ya da sadece varsayılan değerler eklemek, onları destekleyen dillerde) aşırı yaratabiliriz. Çok geçmeden, 10 parametre, bir yöntem var. İlk üç gerçekten gerekli sadece, parametreleri 4-7 isteğe bağlıdır. Ama eğer parametre 6, belirtilen 7-9 gerekli doldurulacaktır de... biz oluşturulan bir sınıf ile tek amacı ne bu statik bir yöntem mi, yapabiliriz bunu çözmek alarak gerekli parametreleri yapıcı ve izin kullanıcı için ayarlamak isteğe bağlı değerler üzerinden özellikler veya yöntemler için birden çok birbirine bağlı değerler aynı zamanda. Eğer bir yöntem karmaşıklığı bu miktara ulaşmıştır ayrıca, büyük olasılıkla kendi sınıf suçun olması gerekir.

Zorlu tüketiciler sebepsiz yere sınıfları örneğini oluşturmak için< / ^ br . En yaygın argümanlardan biri, neden bizim sınıf tüketiciler örneği yok sonradan sahip olurken, bu tek yöntem çağırma için bir örnek oluşturmak, talep? Bir sınıf örneği oluşturma çoğu dilde çok çok ucuz bir işlemdir, hız bir sorun değildir. Tüketici için ek bir kod satırı ekleyerek, gelecekte çok daha sürdürülebilir bir çözüm temel atma için düşük maliyet. Ve son olarak, eğer örneklerini oluşturma önlemek istiyorsanız, sadece bu sınıf vatansız olan gereksinimi yapıyor olsa da kolay yeniden kullanım için izin veren bir sınıf tek bir kapsayıcı oluşturun. Eğer vatansız ise, hala uzun vadede tüm avantajlarını sunarken her şeyi ele statik sarıcı yöntemleri oluşturabilirsiniz. Son olarak, eğer bir tek sanki örnekleme gizleyen bir sınıfı yapabilirsin: MyWrapper.Örneği sadece yeni Sınıfım döndüren bir özelliktir();

Sadece bir Sith lord'u zorbalığı seçer< / ^ br . Tabii ki, statik yöntemlerin benim sevmediğim için istisnalar vardır. Kabartmak için herhangi bir risk oluşturmaz bu doğru yardımcı program sınıfları statik yöntemleri - Sistem için mükemmel bir örneği.Örnek olarak dönüştürmek. Eğer projeniz gelecek bakım için bir kerelik hiçbir gereksinimleri ile, genel mimarisi gerçekten çok önemli - statik veya statik olmayan, gerçekten kalkınma hızı, ancak bir önemi yok değil mi.

Standartlar, standartlar, standartlar!< / ^ br . Örnek yöntemleri statik yöntemleri kullanarak da tersi kullanmanızı engellemez. Farklılaşma arkasındaki mantık olduğu sürece ve Standardize edilmiş. Hiçbir iş bir katman farklı uygulama yöntemleri ile yayılan bakıyor daha kötüsü var.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • colacas

    colacas

    29 EKİM 2006
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010