TL; DR: Bu, çözmeye çalıştığınız şeye bağlıdır.
Biz nasıl konuşurken ben, bu konuda benim Grampsler benzer bir konuşma yaptım Func ve Eylem C # müthiş. Gramps çok eski bir zamanlayıcı programcısıdır, yazılım bütün odayı kullanan bilgisayarlarda çalıştırıldığından beri kaynak kodları etrafındadır.
Hayatında birkaç kez teknik değiştirdi. C, COBOL, Pascal, BASIC, Fortran, Smalltalk, Java kodlarını yazdı ve sonunda bir hobi olarak C # ile başladı. IBM'in SideKick'in mavi editöründeki ilk kod satırlarımı oyup, bir şey yaparken, kucağında otururken, onunla nasıl programlanacağını öğrendim. 20 yaşına geldiğimde, dışarıda oynamaktan çok daha fazla zaman geçirdim.
Bunlar biraz hatıralarım, bu yüzden onları yeniden uygularken tam olarak pratik olmazsam özür dilerim. Bu anlardan biraz düşkünüm.
Bana öyle dedi:
“Bir sorunun genelleştirilmesi için mi gitmeli, yoksa belirli bir kapsamda çözmeli miyiz, soruyor musunuz? Peki, bu bir ... soru.”
Gramps, kısa bir süre düşünmek için durdu, gözlüklerinin yüzündeki konumunu sabitledi. Eski ses sisteminde Deep Purple'ın LP'sini dinlerken bilgisayarında bir maç-3 oyunu oynuyordu.
“Bu, hangi sorunu çözmeye çalıştığınıza bağlı olacaktır” dedi. “Tüm tasarım seçimleri için tek ve kutsal bir çözümün var olduğuna inanmak cazip geliyor, ama bir tane yok. Yazılım Mimarisi peynir gibidir, görüyorsunuz.”
“... Peynir, Gramps?”
“En sevdiğin hakkında ne düşündüğün önemli değil, her zaman koklamak olduğunu düşünen biri olacak”.
Bir süreliğine karışıklık içinde göz kırptım, fakat Gramps'ın devam ettiği bir şey söylemeden önce.
"Bir araba inşa ederken, bir parça için malzemeyi nasıl seçersiniz?"
“Ben ... Sanırım bunun maliyetlere ve parçanın ne yapması gerektiğine bağlı olduğunu düşünüyorum.”
“Bu, parçanın çözmeye çalıştığı soruna bağlı. Çelikten yapılmış bir lastik veya deriden yapılmış bir ön cam üretmeyeceksiniz. Elinizdeki problemi en iyi çözen malzemeyi seçersiniz. Şimdi, ne genel bir çözüm? Veya belirli bir çözüm? Hangi soruna, hangi kullanım durumuna? Tam işlevsel bir yaklaşımla mı gitmeli, sadece bir kez kullanılacak olan bir koda maksimum esneklik mi vermelisiniz? Sisteminizin çok ve çok fazla kullanım ve muhtemelen çok fazla değişiklik görecek bir parçası mı? Bunun gibi tasarım seçimleri, bir otomobilde bir parça için seçtiğiniz malzemeler veya küçük bir ev inşa etmek için seçtiğiniz Lego tuğlası şeklindedir. "Hangi Lego tuğlası en iyisi?"
Yaşlı programcı, devam etmeden önce masasında aldığı küçük bir Lego tren modeline ulaştı.
“Sadece o tuğlaya neye ihtiyacınız olduğunu biliyorsanız , cevap verebilirsiniz . Belirli bir çözümün jenerik olandan daha iyi olup olmadığını nasıl bileceksiniz, ya da tam olarak ne gibi bir problem olduğunu bilmiyorsanız, Çözmeye çalışıyor musunuz? Anlamadığınız bir seçeneği göremiyorsunuz. ”
“..Sadece Matrix'ten alıntı mı yaptın ? ”
"Ne?"
"Hiçbir şey, devam et."
“Ulusal Fatura Sistemine bir şeyler inşa etmeye çalıştığınızı varsayalım. Bu cehennem API'sinin ve otuz bin satırlık XML dosyasının içeriden nasıl göründüğünü biliyorsunuz. Bu dosyayı oluşturmak için 'genel' bir çözüm nasıl görünürdü? Dosya, isteğe bağlı parametrelerle doludur, yalnızca çok özel iş kollarının kullanması gereken durumlarla doludur .. Çoğu durumda, bunları güvenli bir şekilde görmezden gelebilirsiniz .. Genel bir fatura sistemi oluşturmanıza gerek kalmaz. Şimdiye kadar satacağım ayakkabıdır.Sadece ayakkabı satmak için bir sistem oluşturun ve onu orada en iyi ayakkabı satan fatura sistemi haline getirin.Şimdi, herhangi bir müşteri türü için fatura sistemi oluşturmak zorundaysanız, daha geniş bir uygulamada - Bağımsız, genel bir satış sistemi olarak yeniden satılmak,örneğin - şimdi yalnızca Gaz, yiyecek veya alkol için kullanılan seçeneklerin uygulanması ilginçtir.Şimdi bunlar olası kullanım durumları. Onlar sadece biraz varsayımsal olmadan önce Davaları kullanmayın ve uygulamak istemezsiniz Davaları kullanmayın . "Sakın kullanma , ihtiyacın olmayan küçük kardeş ."
Gramps lego trenini yerine koydu ve 3. maçına döndü.
“Yani, belirli bir sorun için genel veya özel bir çözüm seçebilmek için önce bu sorunun ne olduğunu anlamanız gerekir. Aksi takdirde, sadece tahmin edersiniz ve tahmin etmek yöneticilerin işidir, programcıların değil. BT’deki her şey buna bağlı. "
Yani, işte orada. "Değişir". Yazılım tasarımı hakkında düşünürken muhtemelen en güçlü iki kelimeli ifadedir.