Son derece performansa duyarlı (saniyede milyon kere denir) birkaç işlevi olan oldukça büyük bir projede kaynak bir dosya var. Aslında, önceki bakım görevlisi, koşullamaları tek bir fonksiyonda kontrol etmek için harcanacak zamandan tasarruf etmek için, her biri çok az farklılık gösteren bir fonksiyonun 12 kopyasını yazmaya karar vermiştir.
Ne yazık ki, bu kod korumak için bir PITA olduğu anlamına gelir. Tüm yinelenen kodu kaldırmak ve sadece bir şablon yazmak istiyorum. Ancak, Java dili şablonları desteklemiyor ve jeneriklerin bunun için uygun olduğundan emin değilim.
Mevcut planım, bunun yerine, fonksiyonun 12 kopyasını üreten bir dosya yazmaktır (pratik olarak sadece bir kullanımlık bir şablon genişletici). Elbette, dosyanın programlı olarak neden oluşturulması gerektiğine dair bolca açıklama yapacağım.
Benim endişem, bunun gelecekteki bakıcıların kafa karışıklığına neden olacağı ve belki de dosyayı değiştirdikten sonra yeniden oluşturmayı unutmaları halinde kötü hatalar getirmesi veya programatik olarak oluşturulan dosyayı değiştirmeleri durumunda (hatta daha da kötüsü) yaratacağıdır. Ne yazık ki, C ++ 'da her şeyi yeniden yazmaktan kısaydı, bunu düzeltmenin bir yolunu görmüyorum.
Bu yaklaşımın yararları, dezavantajlardan ağır basıyor mu? Bunun yerine:
- Performansı etkile ve tek bir bakım işlevini kullan.
- İşlevin 12 kez neden kopyalanması gerektiğine dair açıklamalar ekleyin ve nezaketle bakım yükünü alın.
- Jenerikleri şablon olarak kullanmaya çalışın (muhtemelen o şekilde çalışmazlar).
- Tek bir işleve performansa bağlı kod yapmak için eski bakıcıya bağırma.
- Performansı ve sürdürülebilirliği korumak için başka bir yöntem?
PS Projenin zayıf tasarımı nedeniyle, işlevin profillenmesi oldukça zordur ... ancak eski bakıcı beni performansın kabul edilemez olduğuna ikna etti. Sanırım bu,% 5'ten fazla anlamına geliyor, ancak bu benim açımdan tam bir tahmin.
Belki biraz daha ayrıntılı çalışmalıyım. 12 kopya da çok benzer bir iş yapıyor ancak dakika farkları var. Farklılıklar fonksiyon boyunca çeşitli yerlerdedir, bu nedenle ne yazık ki çok, çok sayıda koşullu ifade vardır. Etkin bir şekilde 6 "işletme" modu ve 2 "işletme paradigması" vardır (kendim tarafından yazılan kelimeler). İşlevini kullanmak için, işlemin "modu" ve "paradigması" belirtilir. Bu asla dinamik değildir; Her kod parçası, tam olarak bir mod ve paradigma kullanır. Tüm 12 mod-paradigma çiftleri uygulamada bir yerde kullanılır. İşlevler, ikinci paradigmayı temsil eden sayılar ve ilk paradigmayı temsil eden tek sayılarla bile, func1 ila func12 olarak adlandırılır.
Sürdürülebilirlik amaç ise, bunun şimdiye kadarki en kötü tasarımla ilgili olduğunun farkındayım. Ama "yeterince hızlı" gibi görünüyor ve bu kod bir süredir herhangi bir değişikliğe ihtiyaç duymuyor ... Orijinal işlevin silinmediğine dikkat etmem gerekiyor (söyleyebildiğim kadarıyla ölü kod olmasına rağmen) , bu yüzden yeniden yapılanma basit olurdu.
Makefile
" (veya hangi sistemi kullanırsanız) oluştururken oluşturun ve derleme bittikten hemen sonra kaldırın . Bu şekilde onlar sadece yok yanlış kaynak dosyasını değiştirmek için bir şans var.