Bu soru benim için zamanında - dün neredeyse tam olarak böyle bir kod yazıyordum. Burada tartışmak için “Hayvan” ı projemle alakalı olanlarla değiştirin. Bir 'switch' ifadesi yerine, sadece bir değişkeni belirli sabit değerlerle karşılaştırmaktan daha fazlasını içeren, biraz daha karmaşık 'if' ifadeleri dizisine sahiptim. Ama bu bir detay. Statik bir fabrika yöntemi, tasarımın hızlı ve kirli kod karmaşasını yeniden düzenlemekten ortaya çıktığı için, bir şeyler tasarlamak için düzgün bir yol gibi görünüyordu.
Bu tasarımı türetilmiş sınıf hakkında bilgi sahibi olan temel sınıfın gerekçesiyle reddettim. LandAnimal ve SeaAnimal sınıfları küçük, temiz ve kolaysa, aynı kaynak dosyada olabilirler. Ama resmi olarak tanımlanmış standartlara uymayan metin dosyalarını okumak için büyük dağınık yöntemlerim var - LandAnimal sınıfımı kendi kaynak dosyasında istiyorum.
Bu, dairesel dosya bağımlılığına yol açar - LandAnimal, Animal'den türetilir, ancak Animal'in LandAnimal, SeaAnimal ve on beş diğer sınıfın var olduğunu zaten bilmesi gerekir. Fabrika yöntemini çıkardım, kendi dosyasına koydum (ana uygulamamda, Hayvanlar kütüphanemde değil) Statik bir fabrika yöntemine sahip olmak sevimli ve zeki görünüyordu, ancak aslında herhangi bir tasarım problemini çözmediğini fark ettim.
Bunun deyimsel C # ile nasıl bir ilgisi olduğuna dair hiçbir fikrim yok, dilleri çok değiştirdiğimden, genellikle her zamanki işimin dışındaki dillere ve geliştirici yığınlara özgü deyimleri ve kuralları görmezden gelirim. Eğer bir şey varsa benim C # anlamlı ise "pitonik" görünebilir. Genel netliği hedefliyorum.
Ayrıca, gelecekteki çalışmalarda genişletilmesi muhtemel olmayan küçük, basit sınıflar için statik fabrika yöntemini kullanmanın bir avantajı olup olmadığını bilmiyorum - hepsinin bir kaynak dosyada olması bazı durumlarda güzel olabilir.