Altbilgi içeriğine atla
Iron Academy Logo
C# Yaygın Sorunlar

DRY İlkesini Ustalaşmak: Daha Temiz Kod için C#'ta Tasarım Desenleri Uygulama

[[academy-video-youtube({"vid": "dhnsegiPXoo", "start_time": "0", "title": "Kuru İlkesi Ustalaştırma: Daha Temiz Kod İçin Tasarım Kalıplarını C#'ta Uygulama", "creator": "Tim Corey", "length": "53m 20s"})]]

C#'da tasarım desenleri, verimli, yeniden kullanılabilir ve sürdürülebilir kod yazmak için temel araçlardır. Bu desenler, yaygın yazılım tasarım sorunlarına standart çözümler sağlar, en iyi uygulamaları teşvik eder ve geliştiricilerin gereksiz koddan kaçınmasına yardımcı olur. Tasarım desenlerini uygularken temel prensiplerden biri, kod içinde tekrarın azaltılmasını vurgulayan DRY (Tekrar Etme)'dir.

Bu makale, Tim Corey'nin "Design Patterns: Don't Repeat Yourself in C#" başlıklı, DRY prensibini ve daha temiz, daha organize bir kod oluşturmadaki pratik uygulamasına derinlemesine dalan videosundan ilham almıştır. Tim'in videosunda tartışılan anahtar kavramlar ve stratejileri keşfederek, bu makale size C# projelerinizde DRY tasarım deseni ilkesini etkili bir şekilde uygulamanız için kapsamlı bir rehber sağlamayı amaçlamaktadır.

Introduction to the DRY Principle in C

Giriş bölümünde, Tim Corey "Tekrar Etme" anlamına gelen DRY prensibini açıklar. Bu prensip, programlamada her bilgi parçası veya mantığın kod içinde tek bir yerde temsil edilmesini sağlayarak fazla çeklini önlemeyi vurgulayan temel bir kavramdır. Tim, bir gösterge panosu formuna sahip bir WinForms uygulamasının basit bir örneğini kullanarak bu prensibi anlatır. Form, ad ve soyad girmek için alanlar ve bu alanlara dayanarak bir çalışan kimlik numarası oluşturma butonu içerir.

Kod Tekrarını Tanımlama ve Öngörme

(0:53)'te Tim, koddaki tekrarı belirleme ve öngörmeye geçer. WinForms uygulamasının örneğini kullanarak, metodların sadece bir kez çağrılsa bile tekrarın nasıl meydana gelebileceğini gösterir. Başvurudaki, çalışan ID oluşturma mantığı, ilk ve soyadlarını içeren metin alanlarından alt dizinleri çıkarmayı ve sonunda üç haneli bir kod eklemeyi içerir.

Applying Design Patterns In Csharp For Cleaner Code 1 related to Kod Tekrarını Tanımlama ve Öngörme

(1:31)'de yukarıdaki ekranda Tim, uygulamanın işlevselliğini gösterir, adın ve soyadın ilk dört harfini üç haneli bir kodla birleştirip bir çalışan kimlik numarası ürettiğini gösterir. Kod açıkça DRY ilkesini takip ediyormuş gibi görünse de, aynı mantığı açıkça tekrarlamadığı için, tekrar modelinde çözülmesi gereken altta yatan sorunlar olduğunu belirtir.

(1:51)'de, kod basit görünse bile, çalışan kimlik numarası oluşturma mantığının butonun tıklama olayıyla sıkı sıkıya bağlı olması nedeniyle DRY ilkesine tam anlamıyla uymadığını belirtir. Bu, bu mantığın, yeni çalışanlardan bir liste işlenirken (3:58) gibi müşteri kodunda başka bir yerde gerektiğini, kodun tekrar edilmesi veya adapte edilmesi gerekeceği anlamına gelir ki bu tekrara yol açar.

Bağımsız, Yeniden Kullanılabilir Metotlar Oluşturma

Bu segmentte, Tim Corey, DRY prensibine uygun bağımsız, yeniden kullanılabilir bir metot oluşturmanın nasıl yapılacağını gösterir. Olay işleyicisinden çalışan kimlik numarası oluşturma mantığını ayrı bir metot haline getirerek başlar. Bu yeniden yapılandırma, GenerateEmployeeID adlı özel bir yöntem oluşturmayı ve mevcut kodu bu yönteme taşımayı içerir (5:15). Revize edilmiş kod, olay işleyicisinde sadece bu metodu çağırmakla sınırlı kalır.

Adımlar ve Örnek:

  1. İlk Kod: Çalışan kimlik numarası oluşturma mantığı bir butonun tıklama olay işleyicisinde doğrudan idi.

    Applying Design Patterns In Csharp For Cleaner Code 2 related to Adımlar ve Örnek:

  2. Yeniden Düzenlenmiş Kod: Tim metodu daha esnek hale getirerek iyileştiriyor. Belirli UI öğelerine güvenmek yerine, yöntem artık firstName ve lastName parametre olarak kabul eder ve üretilen kimliği döndürür. Bu değişiklik, metodun çeşitli bağlamlarda ve UI elemanlarında kullanılmasına olanak sağlar:

    private string GenerateEmployeeID(string firstName, string lastName)
    {
      string employeeID = firstName.Substring(0, 4) + lastName.Substring(0, 4) + DateTime.Now.Millisecond.ToString();
      return employeeID;
    }
    private string GenerateEmployeeID(string firstName, string lastName)
    {
      string employeeID = firstName.Substring(0, 4) + lastName.Substring(0, 4) + DateTime.Now.Millisecond.ToString();
      return employeeID;
    }

    Tim daha sonra bu methodun tıklama olayından nasıl çağrıldığını gösteriyor:

    employeeIdText.Text = GenerateEmployeeID(firstNameText.Text, lastNameText.Text);
    employeeIdText.Text = GenerateEmployeeID(firstNameText.Text, lastNameText.Text);

    Ayrıca bu metodun artık uygulamanın diğer bölümlerinde, çoklu çalışan kayıtlarıyla CSV dosyalarını işlerken tekrar edilmeden kullanılabileceğini de belirtiyor.

Bir Sınıf Kütüphanesi Oluşturma ve Kullanma

Tim Corey ardından, kodun yeniden kullanımını ve sürdürülebilirliğini daha da artırmak için bir sınıf kütüphanesi kavramını keşfeder. O, GenerateEmployeeID yöntemini bir sınıf kütüphanesi nesnesine nasıl kapsülleneceğini ve bunun birden fazla projede nasıl kullanılabileceğini gösterir.

(8:00)'de Tim, tasarımın kullanıcı gereksinimlerine veya şirket politikalarına bağlı olarak grafikler ve animasyonlarla daha etkileşimli hale getirilmesi için değişmeye devam ettiğini açıklar. Bu yüzden, çözüm içerisinde tam alanlara ve Çalışan Kimlik No oluşturmak için bir butona sahip bir WPF projesi tanıtır.

(9:15)'de, bir sınıf kütüphanesi kullanmanın önemini vurgulayarak, tekrar etmekten kaçınmak istiyorsak, yeni WPF projesine kodun kopyalanması gerektiğini belirtiyor. Dolayısıyla, DRY'ı korumak için sınıf kütüphanesinde sınıflar oluşturmamız gerekir.

Adımlar ve Örnek:

  1. Sınıf Kütüphanesi Oluşturma:

    • Tim (9:47)'de .NET Framework'te yeni bir sınıf kütüphanesi projesi oluşturarak DRYDemoLibrary adını veriyor.

    • Bu kütüphanenin içinde, o, bir public class EmployeeProcessor tanımlar ve GenerateEmployeeID yöntemini bu sınıfa taşır:

      public class EmployeeProcessor
      {
       public string GenerateEmployeeID(string firstName, string lastName)
       {
          string employeeID = firstName.Substring(0, 4) + lastName.Substring(0, 4) + DateTime.Now.Millisecond.ToString();
          return employeeID;
       }
      }
      public class EmployeeProcessor
      {
       public string GenerateEmployeeID(string firstName, string lastName)
       {
          string employeeID = firstName.Substring(0, 4) + lastName.Substring(0, 4) + DateTime.Now.Millisecond.ToString();
          return employeeID;
       }
      }
  2. Projelerde Sınıf Kütüphanesi Kullanma:

    • WinForms (13:18) ve WPF projelerinde (14:00), Tim DRYDemoLibrary sınıf kütüphanesine bir referans ekler.

    • Ardından eski kodu, bu sınıf kütüphanesinden GenerateEmployeeID yöntemine yapılan çağrılarla değiştirir:

      EmployeeProcessor processor = new EmployeeProcessor();
      employeeIDText.Text = processor.GenerateEmployeeID(firstNameText.Text, lastNameText.Text);
      EmployeeProcessor processor = new EmployeeProcessor();
      employeeIDText.Text = processor.GenerateEmployeeID(firstNameText.Text, lastNameText.Text);
    • Bu yaklaşım, metodun artık tek bir yerde sürdürüldüğü için tekrarı ortadan kaldırır. Tim aynı sınıf kütüphanesinin, kodu tekrar etmeden farklı UI çerçeveleri (WinForms ve WPF) üzerinden kullanılabileceğini gösterir.
  3. Avantajlar:

    • Tutarlılık: Tim, mantığı bir sınıf kütüphanesinde merkezileştirme yoluyla, mantık değişikliklerinin (örneğin, hata düzeltmeleri) tüm projeler arasında eşit şekilde uygulandığını sağlar.

    • Bakımının Azaltılması: Metot değişiklikleri sadece sınıf kütüphanesinde yapılmalıdır, bu da tutarsızlıkları önler ve bakım yükünü azaltır.

Sınıf Kütüphanesini Birden Çok Proje İçine Entegre Etme

Tim Corey, geliştirici kütüphanelerin farklı tipte projelerde kullanımı devamını keşfeder, özellikle yeni bir konsol uygulamasına kütüphaneyi entegre etmeye odaklanır. Bu, kütüphanenin işlevselliğinin, aynı çözümdeki örnek ve sadece bir kereden fazla durumda yeniden kullanılabileceğini gösterir.

Adımlar ve Örnek:

  1. Yeni Bir Çözüm ve Proje Oluşturma:

    • Tim (17:29)'da, farklı bir proje türünde, örneğin bir Windows hizmeti veya konsol uygulaması varolması gerektiği bir senaryoyu simüle ederek bir konsol uygulama için yeni bir çözüm oluşturmaya başlar.

    • Yeni projeye ConsoleUI adını verir ve nasıl bir temel konsol uygulaması kurulacağını gösterir.

      class Program
      {
       static void Main(string[] args)
       {
          Console.ReadLine();
       }
      }
      class Program
      {
       static void Main(string[] args)
       {
          Console.ReadLine();
       }
      }
  2. Sınıf Kütüphanesine Referans Ekleme:

    • Tim, yeni projeye DRYDemoLibrary DLL'ine bir referansın nasıl ekleneceğini açıklar. Bu, sınıf kütüphanesi projesinin bin klasöründeki DLL dosyasına geçip, konsol uygulamasına eklemeyi içerir.

      using DRYDemoLibrary;
      using DRYDemoLibrary;

    sınıfı

      Console.WriteLine("What is your first name?");
      string firstName = Console.ReadLine();
    
      Console.WriteLine("What is your last name?");
      string lastName = Console.ReadLine();
    
      EmployeeProcessor processor = new EmployeeProcessor();
      string employeeID = processor.GenerateEmployeeID(firstName, lastName);
    
      Console.WriteLine($"Your employee ID is {employeeID}");
      Console.WriteLine("What is your first name?");
      string firstName = Console.ReadLine();
    
      Console.WriteLine("What is your last name?");
      string lastName = Console.ReadLine();
    
      EmployeeProcessor processor = new EmployeeProcessor();
      string employeeID = processor.GenerateEmployeeID(firstName, lastName);
    
      Console.WriteLine($"Your employee ID is {employeeID}");
  3. Konsol Uygulamasını Çalıştırma:

    • Tim, kütüphaneyi kullanarak başarılı bir şekilde çalışan kimlik numarası oluşturduğunu göstermek için konsol uygulamasını çalıştırmayı gösterir. Bu, sınıf kütüphanesinden gelen kodun farklı projelerde yeniden kullanılabilir olduğunu doğrular.

      Applying Design Patterns In Csharp For Cleaner Code 3 related to Adımlar ve Örnek:

  4. DLL'yi Güncelleme:

    • Tim, kısa bir şekilde eğer DLL değişirse, onu başvuru projelerde güncelleyebileceğinizi belirtir. Bu videoda detaya yer verilmemiş olsa da, birden çok projede DLL'leri yönetmek ve güncellemek için NuGet paketlerini kullanmanın önerilen bir yaklaşım olduğunu belirtir.

DLL'lerin Güncellenmesi ve NuGet Paketlerini Yönetme

Tim Corey, sınıf kütüphanelerini yönetmek ve güncellemek için NuGet paketlerinin kullanılmasına kısaca giriş yapar. Bu yaklaşım, özellikle daha büyük projelerde veya organizasyonlarda bağımlılıkları ve güncellemeleri yönetmek için daha ölçeklenebilir bir çözüm sunar.

Ana Noktalar:

  1. Bir NuGet Paketi Oluşturma:

    • Tim, DLL dosyalarını elle yönetmek yerine sınıf kütüphanesi için bir NuGet paketi oluşturmayı önerir. Bu, DLL'i bir NuGet paketine paketlemeyi ve bir NuGet sunucusuna (özel veya genel) yüklemeyi içerir.
  2. Paketleri Güncelleme:

    • Bir NuGet paketi kullanarak, referans yerine, yalnızca paket sürümünü güncelleyerek kütüphaneyi tüm projeler arasında güncelleyebilirsiniz. Bu, tutarlılığı sağlama ve sürüm eşleşmezliklerini ya da eksik güncellemeleri önleme bakımından dikkat çeker.
  3. Faydalar:

    • Merkezi Yönetim: NuGet paketleri, kütüphane sürümlerini ve bağımlılıklarını yönetmek için merkezi bir yol sunar.

    • Kolay Güncellemeler: Birden çok proje üzerinde kütüphaneyi güncellemek daha kolay ve daha güvenilir hale gelir.

    • Entegrasyon: NuGet, çeşitli geliştirme araçları ve ortamlarıyla entegrasyon kardeştirir ve kütüphane bağımlılıklarını yönetme sürecini kolaylaştırır.

Birim Testlerinde DRY Uygulama: Bir Hızlı Kurs

Bu bölümde, Tim Corey, DRY (Kendini Tekrarlama) ilkesinin uygulama birim testlerini nasıl geliştirebileceğini gösteriyor. Geliştirme çalışmalarında DRY ilkelerini özellikle birim testlerine odaklanarak nasıl uygulanacağını gösteriyor.

İlk Test Kurulumu

Tim, şu anda DLL'deki bir hata nedeniyle başarısız olan bir birim testi yayımlayarak başlıyor. Bu testlerin, kod ana çözümün dışındayken bile sorunları tanımlamada ne kadar önemli olduğunu vurguluyor. Kod, 4 harfli bir girdi bekliyordu, ancak Tim 3 harfli bir ilk ad geçti, bu da DLL dosyasında çökmeye neden oldu, çözüme doğrudan dahil edilmemiş olsa bile.

Applying Design Patterns In Csharp For Cleaner Code 4 related to İlk Test Kurulumu

Hataları Ele Almak İçin Kodu Refaktöre Etmek

İlk ad işleme sorununu ele almak için Tim, kodu yeniden düzenliyor. Geliştirme çalışmalarına DRY uygulanmasını, yeni bir sınıf kütüphanesi projesi oluşturarak (23:50) nasıl yapılacağını açıklıyor. Bu yaklaşım, birden fazla nesneyle ilgili değişikliklerin bir kez yapılmasını ve yinelenen düzeltmelere gerek kalmadan etkili bir şekilde test edilmesini sağlar.

Applying Design Patterns In Csharp For Cleaner Code 5 related to Hataları Ele Almak İçin Kodu Refaktöre Etmek

Birim Testlerini Ekleme

Tim, sınıf kütüphanesi projesinde EmployeeProcessorTest adlı yeni bir test sınıfını tanıtıyor ve XUnit kullanarak birim testleri kuruyor. Çalışan kimlikleri oluşturmak için bir test yöntemi nasıl oluşturulacağını gösteriyor ve gerçek değerlere güvenmek yerine bağımlılıkları taklit etmenin önemini tartışıyor.

Applying Design Patterns In Csharp For Cleaner Code 6 related to Birim Testlerini Ekleme

Bir Test Yöntemi Yazma

Tim, GenerateEmployeeID_ShouldCalculate adlı bir birim test yöntemi yazıyor. Yöntemin beklenen sonuçları döndüreceğini garanti altına almak için farklı senaryoları test etmeye yönelik satır içi verilere sahip bir teori oluşturuyor. Assert.Equal'ı kullanarak çıktıyı nasıl doğrulayabileceğini de açıklıyor.

public class EmployeeProcessorTest
{
   [Theory]
   [InlineData("Timothy", "Corey", "TimoCore")]
   public void GenerateEmployeeID_ShouldCalculate(string firstName, string lastName, string expectedStart)
   {
      // Arrange
      var processor = new EmployeeProcessor();

      // Act
      var actualStart = processor.GenerateEmployeeID(firstName, lastName).Substring(0, 8);

      // Assert
      Assert.Equal(expectedStart, actualStart);
   }
}
public class EmployeeProcessorTest
{
   [Theory]
   [InlineData("Timothy", "Corey", "TimoCore")]
   public void GenerateEmployeeID_ShouldCalculate(string firstName, string lastName, string expectedStart)
   {
      // Arrange
      var processor = new EmployeeProcessor();

      // Act
      var actualStart = processor.GenerateEmployeeID(firstName, lastName).Substring(0, 8);

      // Assert
      Assert.Equal(expectedStart, actualStart);
   }
}

Birim Testini Çalıştırma

Tim, tarih ve saat değerleri gibi dinamik verileri taklit etmenin test koşullarını ve sonuçlarını kontrol etmede ne kadar önemli olduğunu vurguluyor. Dinamik dizelerle çalışma zorluğunu ve farklı senaryoları kontrol edilen değerler kullanarak nasıl test edeceğini tartışıyor. Ardından birim testi çalıştırır, fakat bundan önce testlerin çalışması için gerekli olan iki NuGet paketini ekler: xunit.runner.console ve xunit.runner.visualstudio.

Applying Design Patterns In Csharp For Cleaner Code 7 related to Birim Testini Çalıştırma

Bir satır içi veri için tüm testleri başarıyla çalıştırdıktan sonra çıkış aşağıdaki gibi gösterilir:

Applying Design Patterns In Csharp For Cleaner Code 8 related to Birim Testini Çalıştırma

Şimdi (31:30) itibarıyla, Tim başka bir inline data ekledi ve alt dizenin ikinci parametresini expectedStart.Length olarak değiştirdi:

public class EmployeeProcessorTest
{
   [Theory]
   [InlineData("Timothy", "Corey", "TimoCore")]
   [InlineData("Tim", "Corey", "TimCore")]
   public void GenerateEmployeeID_ShouldCalculate(string firstName, string lastName, string expectedStart)
   {
      var processor = new EmployeeProcessor();
      var actualStart = processor.GenerateEmployeeID(firstName, lastName).Substring(0, expectedStart.Length);
      Assert.Equal(expectedStart, actualStart);
   }
}
public class EmployeeProcessorTest
{
   [Theory]
   [InlineData("Timothy", "Corey", "TimoCore")]
   [InlineData("Tim", "Corey", "TimCore")]
   public void GenerateEmployeeID_ShouldCalculate(string firstName, string lastName, string expectedStart)
   {
      var processor = new EmployeeProcessor();
      var actualStart = processor.GenerateEmployeeID(firstName, lastName).Substring(0, expectedStart.Length);
      Assert.Equal(expectedStart, actualStart);
   }
}

(32:05) İkinci teoriyle birlikte birim testini tekrar çalıştırdıktan sonra test bozuldu:

Applying Design Patterns In Csharp For Cleaner Code 9 related to Birim Testini Çalıştırma

Özel Yöntemlerle Kodu Geliştirme

Tim, DRY'e uymak için kodu daha fazla yeniden yapılandırarak, gerçek EmployeeProcessor sınıfında DRYDemoLibrary altında GetPartOfName adlı özel bir yöntem oluşturur. Bu yöntem, bir ismin parçalarını ayıklamayı ele alıyor, kodun yeniden kullanılabilirliğini ve okunabilirliğini artırıyor. Tim aşağıdaki değişiklikleri yaptı:

public string GenerateEmployeeID(string firstName, string lastName)
{
   string employeeID = $@"{GetPartOfName(firstName, 4)}{GetPartOfName(lastName, 4)}{DateTime.Now.Millisecond.ToString()}";
   return employeeID;
}

private string GetPartOfName(string name, int numberOfCharacters)
{
   string output = name;

   if (name.Length > numberOfCharacters)
   {
      output = name.Substring(0, numberOfCharacters);
   }

   return output;
}
public string GenerateEmployeeID(string firstName, string lastName)
{
   string employeeID = $@"{GetPartOfName(firstName, 4)}{GetPartOfName(lastName, 4)}{DateTime.Now.Millisecond.ToString()}";
   return employeeID;
}

private string GetPartOfName(string name, int numberOfCharacters)
{
   string output = name;

   if (name.Length > numberOfCharacters)
   {
      output = name.Substring(0, numberOfCharacters);
   }

   return output;
}

Birim Testlerini Güncelleme

Tim, alt dizelerin beklenen uzunluğunun değiştirilmesi gibi koddaki değişikliklere yansıtmak için birim testlerini güncelliyor. Bu testleri çalıştırmanın sorunları hızla tanımlamaya ve kodun yeni gereksinimleri karşıladığını doğrulamaya nasıl yardımcı olacağını açıklıyor. Tim yeni teoriler ekliyor ve sonrasında çıktıların beklenip beklenmediğini doğrulamak için birim testlerini çalıştırıyor:

Applying Design Patterns In Csharp For Cleaner Code 10 related to Birim Testlerini Güncelleme

.NET Standard Kütüphaneleriyle Çok Yönlülüğü Artırma

.NET Standard Kütüphanesi Oluşturma

Sınıf kütüphanenizin çok yönlülüğünü artırmak için Tim Corey, .NET Framework sınıf kütüphanesinden .NET Standard sınıf kütüphanesine geçmeyi öneriyor. Bu değişiklik, kütüphanenin çeşitli platformlarda uyumlu olmasını sağlar, bunlar dahil:

  • Windows Platformları: WinForms, WPF ve Konsol Uygulamaları
  • Çapraz Platform: .NET Core, Xamarin (iOS ve Android için), Linux ve macOS

.NET Standard Kütüphanesi Oluşturma Adımları:

  1. Yeni Proje Ekle: Çözümünüze sağ tıklayın ve yeni bir proje eklemeyi seçin.
  2. .NET Standard'ı Seçin: Bir .NET Framework sınıf kütüphanesi seçmek yerine .NET Standard'ı seçin. Bu kütüphane türü geniş bir platform yelpazesini destekler.

    Applying Design Patterns In Csharp For Cleaner Code 11 related to .NET Standard Kütüphanesi Oluşturma Adımları:

  3. Kod Göçü: Mevcut kodunuzu (örneğin, EmployeeProcessor sınıfı) yeni .NET Standard kütüphanesine kopyalayıp yapıştırın. Bu işlem küçük ayarlamalar gerektirebilir, ancak çekirdek mantık tutarlı kalır.

Bu .NET Standard dönüşümü ile kütüphanenizi çeşitli platformlardan erişilebilir hale getirerek, farklı uygulama türleri arasındaki kod tekrarı azaltılır ve geliştirme çabası tasarruf edilir.

Yazılımda Tekrarı Önleme

Geliştirme Sürecinde Tekrarı Azaltma

Tim Corey, .NET Standard kütüphanesi benimseyerek sadece kod tabanındaki değil, geliştirme sürecindeki kod tekrarlarını da en aza indirdiğinizi vurguluyor. Farklı platforma özel projeler arasında kodu çoğaltmak yerine, çeşitli ortamlarda çalışan tek bir kütüphanede merkezi hale getirirsiniz.

Faydalar:

  • Birleşik Kod Tabanı: Çeşitli platformlar için tek bir kod tabanı, kodunuzu sürdürme ve güncelleme çabasını azaltır.
  • Basitleştirilmiş Test: Bir .NET Standard kütüphanesi ile, birim testlerini bir kez yazabilir ve tüm desteklenen platformlar için geçerli olduklarını doğrulayabilirsiniz.

Test ve Hata Ayıklama: Tim, çabayı ve tekrarı daha da azaltmanın bir yolu olarak birim testlerini tanıtıyor. Otomatik testler, her uygulama yinelemesini manuel olarak test etme ihtiyacı olmadan kodunuzun doğruluğunu doğrular.

DRY Uygulama İpuçları: Nerede Duracağınızı Bilin

Tim Corey, DRY (Kendini Tekrarlama) ilkesini uygulamanın sürdürülebilir kod yazmak için çok önemli olduğunu, ancak ne zaman ve nerede uygulayacağınızı bilmenin önemli olduğunu vurguluyor. Her senaryo aynı yaklaşımı gerektirmez, bu yüzden Tim'in içgörülerinden ilham alan bazı pratik ipuçları burada:

  1. Kod Arkasında ve UI'de Koddan Kaçının: Tim, mantığı doğrudan kod arkası dosyalarına veya kullanıcı arayüzlerine yerleştirmemeyi tavsiye eder. Örneğin, iş mantığı bir formda veya bir düğme tıklama olayına gömülmemelidir. Bunun yerine, bu tür mantığı ayrı sınıflarda veya kütüphanelerde tutun. Bu ayrılık, temiz bir mimariyi sürdürmenize ve kodunuzu farklı kullanıcı arayüzleri arasında daha yeniden kullanılabilir hale getirmenize yardımcı olur.

  2. .NET Standard Kütüphanelerinden Yararlanın: Kütüphane oluştururken, Tim mümkün olduğunda .NET Framework kütüphaneleri yerine .NET Standard kütüphaneleri kullanmayı öneriyor. .NET Standard kütüphaneleri daha çok yönlüdür, kodunuzun .NET Core, Xamarin ve daha fazlası dahil olmak üzere farklı platformlarda kullanılmasını sağlar. Bu yaklaşım kod çoğaltmayı azaltır ve kod taşınabilirliğini artırır.

  3. Platforma Özel Kodu Ayırın: Bazı kodlar, platforma özgü gereksinimler nedeniyle bir .NET Standard kütüphanesine uymayabilir, dosya yönetimi veya yapılandırma yönetimi gibi. Tim, bu durumlarda iki kütüphane oluşturmanızı öneriyor: biri .NET Standard kodu için ve diğeri platforma özgü kod için. Bu şekilde, çekirdek mantığı yine de yeniden kullanabilir ve platforma özgü ihtiyaçları karşılayabilirsiniz.

  4. Birim Testlerine Önem Verin: Tim, kodunuz için birim testleri yazmayı kuvvetle teşvik ediyor. Birim testler, hataları erken tespit etmeye ve kodunuzun beklenildiği gibi davrandığını doğrulamaya yardımcı olur. Hızlı bir şekilde değişiklikleri doğrulamanıza ve tüm uygulamayı manuel olarak test etme gereksinimini ortadan kaldırarak hata ayıklama sürecini önemli ölçüde hızlandırabilirler.

  5. Proje Boyutunu Dikkate Alın: Çok küçük veya deneysel projeler için Tim, ayrı kütüphaneler oluşturmanın ve kapsamlı birim testlerinin oluşturmanın gerekli olmayabileceğini kabul ediyor. Ancak, üretim uygulamaları için, temiz bir mimari ve birim testle başlamak tavsiye edilir, çünkü küçük projeler zamanla büyüme ve gelişme eğilimindedir.

Bu ipuçlarını izleyerek, DRY ilkesini etkili bir şekilde uygulayabilirken, kod yeniden kullanımı ve sürdürülebilirliğini pratik hususlarla dengeleyebilirsiniz.

Sonuç

Tasarım kalıpları aracılığıyla DRY ilkesini ustalıkla uygulamak, temiz ve sürdürülebilir C# kodu yazmak için esastır. Tim Corey tarafından gösterildiği gibi, DRY'yi etkili bir şekilde uygulamak, yeniden kullanılabilir yöntemler oluşturmayı, sınıf kütüphanelerinden yararlanmayı ve daha geniş uyumluluk için .NET Standard'ı kabullenmeyi içerir. Bu uygulamaları ne zaman ve nasıl uygulayacağınızı anlayarak, kod kalitenizi ve esnekliğinizi önemli ölçüde artırabilirsiniz.

Daha derinlemesine bilgiler için, Tim Corey'nin bu konudaki videosuna buradan göz atın. Tim'in en son içeriğinden haberdar kalmak için onun YouTube kanalını ziyaret edebilirsiniz.

Hero Worlddot related to DRY İlkesini Ustalaşmak: Daha Temiz Kod için C#'ta Tasarım Desenleri Uygulama
Hero Affiliate related to DRY İlkesini Ustalaşmak: Daha Temiz Kod için C#'ta Tasarım Desenleri Uygulama

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara