SORU
10 Mart 2009, Salı


Kurucular vs Fabrika Yöntemleri

Ne modelleme dersleri başlatılıyor tercih edilen yol olsa da

  1. Kurucular
  2. Fabrika Yöntemleri

Peki ikisini de kullanarak önemli noktalar olacaktır.

Bazı durumlarda nesne olamaz yapılmak durumunda null döndürür fabrika bir yöntem olması tercih ederim. Bu kodu düzgün yapar. Sadece eğer döndürülen değer null olup olmadığını kontrol edebilirim ya da başka yapıcı bir özel durum üretiliyor aksine alternatif önlem. (Ben şahsen istisnalar sevmiyorum :( )

Düzenleme:

Diyelim ki, bir kimliği bekleyen bir sınıf için bir yapıcı var. Yapıcı bu değer veritabanından sınıfı doldurmak için kullanır. Durumda belirtilen ıd değeri ile bir rekor yapıcı bir RecordNotFoundException atar mevcut değil. Bu durumda try..catch bloğu içinde tüm bu sınıfların yapı içine girecek.

Buna karşılık Eğer kayıt bulunursa NOT null dönecektir bu sınıflar üzerinde fabrika statik bir yöntem olabilir.

Hangi yaklaşım bu durumda daha mı iyi?

  1. Kurucu
  2. Fabrika Yöntemi

CEVAP
10 Mart 2009, Salı


Ne olduğunu ve neden onları var mı bir sor kendine. Her ikisi de bir nesne örneği oluşturmak için.

ElementarySchool school = new ElementarySchool();
ElementarySchool school = SchoolFactory.Construct(); // new ElementarySchool() inside

Şimdiye kadar fark yok. Şimdi çeşitli okul türleri var ve bir Lise ElementarySchool türetilmiştir veya ElementarySchool olarak aynı arabirimi İSchool uygulayan () ElementarySchool kullanarak geçiş istiyoruz düşünün. Kod değişikliği olacaktır:

HighSchool school = new HighSchool();
HighSchool school = SchoolFactory.Construct(); // new HighSchool() inside

Bir arayüz halinde olurdu:

ISchool school = new HighSchool();
ISchool school = SchoolFactory.Construct(); // new HighSchool() inside

Şimdi Eğer bu kod birden fazla yerde görebilirsiniz bunu kullanarak fabrika yöntemi olabilir oldukça ucuz çünkü bir kere değiştirdikten fabrika yöntemi bitirdin (eğer kullandığımız ikinci örnek ile arayüzleri).

Ve bu temel fark ve avantajdır. Karmaşık bir sınıf hiyerarşileri ile ilgili başlangıç ve dinamik olarak böyle bir hiyerarşi bir sınıfın örneğini oluşturmak istediğinizde aşağıdaki kodu olsun. Fabrika yöntemleri örnek ne yöntemini belirten bir parametre oluşturmak için alabilir. Hadi MyStudent bir sınıf var ve öğrenci bu okulun bir üyesi olacak biçimde ilgili İSchool nesne oluşturmak gerekir.

ISchool school = SchoolFactory.ConstructForStudent(myStudent);

Şimdi farklı İStudent nesneleri oluşturmak için nesne ne belirler bir iş mantığı içeren uygulamanızda bir yer var.

Çok basit dersler (değer nesneler, vb.) kurucu gayet iyi (uygulama overengineer istemiyorum) ama karmaşık sınıf hiyerarşileri için fabrika yöntemi tercih ediliyor.

gang of four book ilk tasarım prensibi izlediğiniz bu yol "bir arayüz için Program, bir uygulama değil".

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007