Yeniden kullanılabilirlik, iyi yazılım tasarımının bir özelliğidir .
Yeniden kullanılabilirlik , iyi yazılım tasarımı için kabul edilebilir bir parlaklık mıdır ("anlamın kısa gösterimi")? Neden?
Yeniden kullanılabilirlik, iyi yazılım tasarımının bir özelliğidir .
Yeniden kullanılabilirlik , iyi yazılım tasarımı için kabul edilebilir bir parlaklık mıdır ("anlamın kısa gösterimi")? Neden?
Yanıtlar:
Yeniden kullanım , iyi tasarımın bir göstergesidir . O belirten kavrama sisteminin gevşek yeterli ve olduğu uyum belirli bir birimin bağımlılık sorunları çalıştırıyorum veya kod en yeniden yazmak zorunda kalmadan yeniden kullanımını kolaylaştırmak için yeterince yüksek olduğunu.
Yeniden kullanılabilirlik büyük ölçüde bir yanılsamadır. Nerede veya nasıl kullanılacağını önceden bilmeden bir birimin "yeniden kullanılabilirliğini" ölçmek doğru değildir. Birçok geliştirici olacaktır deneyin "yeniden" bileşenleri tasarlamak ve çoğu zaman "esnek" yapmaya çalıştı belirli yönleri tam olarak olanlar olduğunu sonradan öğrenmek için vermedi olmak gerekir.
Farklı bir "parlaklık" kullanırdım: Ahit edilebilirlik.
Şimdi TDD'nin savunucusu değilim, ne de her şeyi ve her şeyi test etme ihtiyacını hissetmiyorum. Ancak bir bileşen için testler yazmak, birleştirme / uyum özellikleri hakkında çok iyi bir fikir verecektir ve çok hızlı bir şekilde. Soyutlamalara bağlıysa, bu gevşek bir bağlantıdır; bağımlılıkları alay etmeyi kolay bulacaksınız ve bu iyi bir tasarım önerir. Açık bir amacı varsa (ayrıca bkz. Tek Sorumluluk İlkesi ), davranışı nispeten sezgisel olacaktır, neyin test edileceğini bulmayı kolay bulacaksınız , bu da yine iyi bir tasarım önermektedir.
Bu elbette iyi bir tasarımı garanti etmez ; gerçek uygulama ve hatta tüm mimari, belirtilen amacı için tamamen uygun olmayabilir. Ama en azından size spagetti kodu veya Tanrı Nesneleri ile çalışmadığınızı söyler.
Lütfen, bir bileşenin "yeniden kullanılabilirliği" konusunda, özellikle "iyi tasarım" ın kanıtı olarak kullanılmayacak şekilde vahşi tahminler yapmaya çalışmayın. Bu, aslında yeniden kullanıldığında, ancak arka planda tasarım yapabileceğiniz bir şeydir ve o zamana kadar tasarım önemli ölçüde değişmiş olabilir.
Hayır.
Yeniden kullanılabilirlik olması iyi bir özelliktir, çünkü gelecekteki gelişimi hızlandırabilir. (Uygulamada çok az kuruluş gelecekteki gelişmeyi umdukları kadar hızlanmış görüyor olsa da.) Bununla birlikte, önemli bir yazılım parçasının söz konusu uygulamaya özgü kısımları vardır. Ayrıca, etki alanı deneyimi olmayan insanlar yeniden kullanılabilir yazılım yazmaya çalıştıklarında, genellikle bu parçayı gizler ve gerçekte yeniden kullanılabilir hale getirmeyi başaramadan performansı düşürürler.
Bu nedenle iyi tasarım modülerdir ve sadece parçanın tekrar kullanılabileceğini görebildiğiniz ve yeniden kullanılabilirliği gerçekten elde etmek için uzmanlığa sahip olduğunuz yerde tekrar kullanılabilir. Başka yerlerde işleri temizlemeye çalışmalısınız, ancak yeniden kullanılabilirlik konusunda endişelenmeyin. (Başınızın arkasında, not aldığınız yer hariç, gelecekteki bazı sistemlerde bunu nasıl yeniden kullanılabilir hale getireceğinize dair bir fikriniz olacaktır.)
Yeniden kullanılabilirlik ve iyi tasarım arasındaki ilişkinin refleksif olmadığına inanıyorum (ve bu benim kişisel inancım), bu yüzden temel ve basit cevap hayır . Bazı iyi tasarım kılavuzlarıyla ilgileniyorsanız, bu wikipedia makalesine bakın.
İyi bir yazılım tasarımı en azından bazı çekirdek parçalarda yeniden kullanılabilir olmalıdır, bir sistemin çekirdeğini birçok farklı bağlamda tekrar kullanılabilir olacak şekilde tasarlamanın son derece karmaşık olması nedeniyle, çok az insanın kaynak kodunun gerçek olarak yeniden kullanılmasını düşünüyorum. (Ve bunu deneyimin dışında söylüyorum)
İhtiyacınız olan tüm görevleri iyi bir şekilde yerine getiren çok büyük sorumluluklara sahip bir sınıfı düşünün (herhangi bir tasarım düşüncesi olmadan, belki de davayı gördünüz). Böyle bir sınıfa sahip çoğu insan bunu tekrar tekrar kullanırdı ve bence bu yeniden, tasarımsız yeniden kullanım konusunda hemfikir olmamız gerekecek.
Umarım açıklamalarımı çok fazla karıştırmadım
İyi tasarımın daha iyi bir göstergesi, tek sorumluluk ilkesi ve her bir bileşenin uyumunun sürdürülmesi gibi temel fikirlere bağlılık olduğunu düşünüyorum. Temiz ve özlü bir arayüzle soyutlamalar kullanarak ve Liskov İkame Prensibi ile uyumu koruyarak, neyin yeniden kullanılacağını ve tekrar kullanılmayacağını tahmin etmeye çalışmadan tekrar kullanılmasını teşvik ediyoruz.
Bu temel tasarım ilkelerine bağlı kalmak, kodun test edilmesini ve tekrar kullanılmasını kolaylaştırır.
İyi tasarım == iyi tasarım, yeniden kullanılabilirlik bir yan üründür.
Yeniden kullanılabilirlik genellikle örtük bir tasarım hedefidir. Eğer daha sonra yeniden kullanılabilir şekilde bir bileşeni, veya tüm bir tasarım oluşturabilir, görünüyor sen arasan aşikardır. Her zaman açık olmayan şey, bir şeyi yeniden kullanılabilir hale getirmek için çok zaman ve çaba (ve para) gerektirebileceğidir ve bu nedenle yeniden kullanılabilirliğin yararı maliyetine karşı tartılmalıdır.
Müşterinin gereksiniminden iki kat daha pahalı ve / veya iki kat daha uzun süren yeniden kullanılabilir bir tasarım, özellikle müşterinin yeniden kullanılabilirliğe ihtiyacı yoksa, müşterinin bakış açısından iyi bir tasarım değildir.
Açıkça iyi göründükleri için genellikle örtük tasarım hedefleri olarak kabul edilen bir dizi benzer özellik vardır:
maliyeti en aza indirmek
geliştirme süresini en aza indirme
karmaşıklığı en aza indirme
güvenilirliği en üst düzeye çıkarmak
Bunların hepsi objektif olarak iyidir, ancak belirli bir zamanda belirli bir müşteri için her zaman önemli olmayabilir, bu nedenle müşterinizin neye ihtiyacı olduğunu tam olarak anlamak önemlidir (bu müşteri sadece patronunuz olsa bile). Bize bu gerçeği hatırlatmak için bir dizi aforizma vardır (örneğin "Bitti mükemmel olmaktan iyidir" ve "İyi, ucuz, hızlı: ikisini seçin"), ancak hala denemenin tuzağına düşmek kolaydır her bakımdan büyük her zaman ihtiyaç duyulmadığı zaman her açıdan harika yazılımlar yapın.
Başlık sorusuna ulaşmak için: Hayır , yeniden kullanılabilirlik iyi tasarımla eşanlamlı değildir. Yeniden kullanılabilirlik, belirli bir iyi tasarımın yararlı bir bileşeni olabilir, ancak yalnızca gerektiğinde.
Şart değil. Asla tekrar kullanılmayacak bir şey yeniden kullanılabilir yaparsanız, bu kötü tasarım.
Örneğin, şirketinize özgü verilerle dolu bir dosya yazıyorsanız ve bu veriler bir kez başka bir yere aktarılacaksa, neden yeniden kullanılabilir hale getirmeye çalışıyorsunuz?
Bununla birlikte, çerçevenizde zaten bir dosya yoksa, bir dosyaya yazma kodunun yeniden kullanılabilir olması gerekebilir. Bu iyi bir tasarım olurdu.
Hayır diyebilirim, çoğunlukla kodun küçük bir bölümünü açıklıyor. Kullanılabilirliğin en önemli olduğu yerde, kullanım bölgesinin tam ortasında ve dış kenarlarında olduğunu, aralarında çok fazla olmadığını gördüm. Yeniden kullanılabilirliğin kaliteli tasarımın faydalı bir ölçüsü olduğunu düşündüğüm şeylere birkaç örnek vereceğim.
Çekirdek Şeyler
Yardımcı Ürünler
Çoğu uygulamanın% 70-80'ini kaplayan CRUD şeyler için, yeniden kullanılabilirliğin hiç değerli bir metrik olduğunu düşünmüyorum.