Yeniden kullanılabilirlik kabaca iyi tasarımla eşanlamlı mı?


10

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?


Esnekliğin daha önemli olduğunu iddia ediyorum. Bir şeyin muhtemelen daha sonra değişeceği veya daha sonra ekleneceği gerçeğini barındırmaya çalışan temel bir mimariye sahip olmak benim görüşümdür. Yeniden kullanılabilirlik bu noktada neredeyse ücretsiz olarak geliyor.
Pemdas

Esneklik kullanımınız tam olarak yeniden kullanılabilirlik gibi görünür.
Matthew Rodatus

"Yeniden kullanılabilirlik, hafif veya hiç değişiklik yapılmadan yeni işlevler eklemek için tekrar kullanılabilecek bir kaynak kodu segmentidir" - en.wikipedia.org/wiki/Reusability
Matthew Rodatus

Aşağıdaki cevapların çoğunun hayır demesinden etkilendim . Şimdi sadece birkaç yıl önce (iyi ... 5-10 yıl), yeniden kullanılabilirliğin son derece arzu edilen bir şey olduğu zaman böyle olurdu.
Martin Wickman

@MartinWickman Yeniden kullanılabilirlik iyidir, ancak ücretsiz değildir.
Caleb

Yanıtlar:


13

Hayır.

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.


İyi cevap. Sormam gereken soruyu cevapladınız: "İyi yazılım tasarımı için iyi bir parlaklık nedir?"
Matthew Rodatus

+1: Özellikle "Yeniden kullanılabilirlik büyük ölçüde bir yanılsamadır".
Kramii

Yeniden kullanılabilirliğin bir hedef olması iyi tasarımın sadece bir göstergesidir. Bu genellikle örtük bir hedef ise bir hedeftir, ancak bileşenlerin gerekmediklerinde yeniden kullanılabilir hale getirilmesi için zaman ve para harcamak sadece israftır.
Caleb

5

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.)


Otomatik test ne olacak? Birim testleri bir tür yeniden kullanım değil mi?
Matthew Rodatus

@ Matthew-Rodatus: Birim testleri yazılımınızın bir parçasıdır. Yeniden kullanma genellikle kodu başka bir yazılımda yeniden kullanmak anlamına gelir .
btilly

İyi bir nokta. Sanırım "yeniden kullanılabilirliği" ontolojik anlamda kullanıyorum, kafa karıştırıcı. Bununla birlikte, yeniden kullanılabilirlik özelliklerinin de test edilebilir kodun özellikleri olduğunu gözlemleyin: en.wikipedia.org/wiki/Reusability
Matthew Rodatus

1
@ matthew-rodatus: Yeniden kullanılabilirlik değil, "Bu çamaşır listesi var." Yeniden kullanılabilirliği bu şekilde elde etmeye çalışırsanız, çok başarısız olursunuz. Bana güven.
btilly

İyi bir nokta. Şimdi anlamaya çalıştığım soruyu sormadığımı görüyorum, ama yine de ilginç bir iletişim kutusu.
Matthew Rodatus

4

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


Bu yüzden "parlaklık" dedim (bununla birlikte, pratikte, yeniden kullanılabilirlik, iyi tasarımla kastettiğimiz şeylerin çoğunu değil, çoğunu yakalar).
Matthew Rodatus

Demek istediğim, iyi bir tasarıma sahip olmak için yeniden kullanılabilirliğe ihtiyacınız var , ancak bir çok "yeniden kullanılabilir" kod deosuna sahip olmak, iyi bir tasarıma sahip olduğunuz anlamına gelmiyor, bu yüzden hala bir parlaklık olarak bile hayır
David Conde

Mantıklı. Kabul ettiğimden emin değilim, ancak iyi düşünülmüş bir cevap için +1.
Matthew Rodatus

2

İ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.


1

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.


0

Ş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.


Bir şeyin asla tekrar kullanılmayacağından nasıl emin olabilirsiniz?
Matthew Rodatus

1
@Matthew - Bu benim iyi bir tasarımcı tanımım olurdu: Genellikle bu soruyu doğru yapan biri
pdr

0

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

  • Bir sayfanın kolayca ve tutarlı bir şekilde (veya herhangi bir kullanıcı arayüzü için) eklenmesine izin veren web formu şablonları
  • Tüm MVVM uygulamalarıma dahil edilecek ViewModel temel sınıfı gibi tasarım deseni yardımcıları

Yardımcı Ürünler

  • SMTP mesajı gönderen e-posta sınıfı (her zaman kullanın)
  • Bir CBS mesafe hesaplayıcı sınıfı (uygulamalarımızın bir kısmında kullanılır)

Ç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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.