Pertanyaan ini tepat waktu untuk saya - saya menulis hampir persis kode kemarin. Ganti saja "Animal" dengan apa pun yang relevan dalam proyek saya, meskipun saya akan tetap dengan "Animal" demi diskusi di sini. Alih-alih pernyataan 'beralih', saya memiliki serangkaian pernyataan 'jika' yang agak lebih rumit, yang melibatkan lebih dari sekadar membandingkan satu variabel dengan nilai-nilai tetap tertentu. Tapi itu detail. Metode pabrik statis tampak seperti cara yang rapi untuk merancang berbagai hal, karena desain muncul dari refactoring yang sebelumnya berantakan cepat dan kotor kode.
Saya menolak desain ini dengan alasan kelas dasar memiliki pengetahuan tentang kelas turunan. Jika kelas LandAnimal dan SeaAnimal kecil, rapi, dan mudah, mereka bisa berada di file sumber yang sama. Tapi saya punya metode berantakan besar untuk membaca file teks yang tidak sesuai dengan standar yang ditetapkan secara resmi - Saya ingin kelas LandAnimal saya di file sumbernya sendiri.
Itu mengarah ke ketergantungan file melingkar - LandAnimal berasal dari Animal, tetapi Animal perlu sudah tahu bahwa LandAnimal, SeaAnimal dan lima belas kelas lain ada. Saya mengeluarkan metode pabrik, memasukkannya ke file sendiri (dalam aplikasi utama saya, bukan perpustakaan Hewan saya). Memiliki metode pabrik statis tampak lucu dan pintar, tetapi saya menyadari bahwa itu tidak benar-benar menyelesaikan masalah desain.
Saya tidak tahu bagaimana ini berhubungan dengan C # idiomatik, karena saya banyak berganti bahasa, saya biasanya mengabaikan idiom dan konvensi yang khas bahasa dan tumpukan dev di luar pekerjaan saya yang biasa. Jika ada C # saya mungkin terlihat "pythonic" jika itu bermakna. Saya bertujuan untuk kejelasan umum.
Juga, saya tidak tahu apakah ada keuntungan menggunakan metode pabrik statis dalam kasus kecil, kelas sederhana yang tidak mungkin diperpanjang dalam pekerjaan di masa depan - memiliki semuanya dalam satu file sumber mungkin bagus dalam beberapa kasus.