Bu oldukça belirsiz bir sorudur, ancak uygun tasarım hakkında okurken hiç tatmin edici bir şekilde cevaplanmadığını hissettiğim bir şeydir.
Genellikle, Nesne Odaklı programlama, soyutlama, çarpanlara ayırma, vb., Tasarımın kutsal kâsesi - ve her zaman söz konusu geliştirme tekniklerini kullandığınızı iddia etmelerinin nedeni - programınızı "değiştirmeyi kolaylaştıracaktır" , "sürdürülebilir", "esnek" veya bu tür üretken bir sondaj kavramını ifade etmek için kullanılan eş anlamlılardan herhangi biri. Ivars'ı özel olarak işaretleyerek, kodu birçok küçük, kendi kendine yeten yönteme bölerek, arayüzleri genel tutarak, programınızı toplam kolaylık ve zarafetle değiştirme yeteneğine sahip olursunuz.
Nispeten küçük değişiklikler için, bu benim için iyi çalıştı. Bir sınıf tarafından performansı artırmak için kullanılan dahili veri yapılarında yapılan değişiklikler hiçbir zaman büyük bir zorluk olmamıştır ve bir metin giriş sisteminin yeniden tasarlanması veya bir oyun öğesi için grafiklerin elden geçirilmesi gibi API'dan bağımsız olarak kullanıcı arayüzü ucunda da değişiklikler yapılmamıştır. .
Tüm bu değişiklikler doğal olarak bağımsızdır. Bunların hiçbiri, programınızın değiştirildiği bileşenin davranışında veya tasarımında, ilgili kod dışında herhangi bir değişiklik içermez. İster yordamsal olarak, ister OO tarzında, ister büyük işlevlerle ister küçük olsun yazsın, yazmayın, sadece orta derecede iyi bir tasarıma sahip olsanız bile bunlar kolayca yapılabilir.
Bununla birlikte, değişiklikler ne zaman büyük ve kıllı hale gelirse - yani API'daki değişiklikler - değerli "kalıplarım" hiçbiri kurtarmaya gelmez. Büyük değişiklik büyük olmaya devam ediyor, etkilenen kod etkilenmeye devam ediyor ve saatler süren böcek yumurtlama çalışmaları önümde duruyor.
İşte benim sorum bu. Uygun tasarım ne kadar büyük bir değişikliğin kolaylaşabileceğini iddia ediyor? Benim için bilinmeyen veya uygulayamadığım, yapışkan sondaj modifikasyonunu gerçekten basitleştiren başka bir tasarım tekniği var mı veya bu söz (bu kadar çok farklı paradigma tarafından yapıldığını duydum) sadece güzel bir fikir mi, yazılım geliştirmenin değişmez gerçekleriyle tamamen bağlantısız mı? Alet kemerine ekleyebileceğim bir "değiştirme aracı" var mı?
Özellikle, beni forumlara yönlendiren karşılaştığım sorun şudur: Yorumlanmış bir programlama dili (D'de uygulandı, ancak bu ilgili değil) uygulamak için çalışıyorum ve kapanışlarımın argümanlarının olması gerektiğine karar verdim. anahtar kelime tabanlı, şu anda oldukları gibi değil. Bu, anonim işlevleri çağıran tüm kodların değiştirilmesini gerektirir, ki bu da, neyse ki, dilimin gelişiminde erken (<2000 satır) olduğum için, ancak bu kararı daha sonraki bir aşamada yapmış olsaydım çok büyük olurdu. Böyle bir durumda, tasarımdaki uygun öngörü ile bu modifikasyonu kolaylaştırabileceğim veya belirli (çoğu) değişikliklerin içsel olarak geniş kapsamlı olabileceği herhangi bir yolu var mı? Bunun kendi tasarım becerilerimin başarısızlığı olup olmadığını merak ediyorum - eğer öyleyse, '
Açık olmak gerekirse, hiçbir şekilde OOP veya yaygın olarak kullanılan diğer kalıplardan hiç şüpheci değilim. Ancak benim için onların erdemleri kod tabanlarının sürdürülmesinden ziyade orijinal yazısındadır. Kalıtım, tekrar eden kalıpları iyi bir şekilde soyutlamanıza izin verir, polimorfizm, kodu makine tarafından anlaşılan etki ( switch
ifadenin hangi dalı) yerine insan tarafından anlaşılan işlev (hangi sınıf) ile ayırmanıza olanak tanır ve küçük, bağımsız işlevler, çok hoş bir "aşağıdan yukarıya" tarzında yazın. Ancak esneklik iddialarından şüpheliyim.
foo metarg1: bar metarg2: baz
olarak foo.metarg1_metarg2_(bar, baz)
. Bununla birlikte, benim dilim daha büyük bir değişiklik yapıyor, yani sözlük tabanlı parametrelere göre liste temelli parametreleri listeliyor, bu da çalışma zamanını etkiliyor ancak ayrıştırıcıyı değil , aslında, dilimin belirli özellikleri nedeniyle şu anda girmeyeceğim. Sıralanmamış anahtar kelime ve konumsal bağımsız değişkenler arasında net bir eşleme olmadığından, çalışma zamanı ana sorundur.