C# WinForms Turnuva Mantık Eğitimi — Tim Corey ile Tam Ders 18 Açıklaması
[[academy-video-youtube({"vid": "i5IAClElyBQ", "start_time": "0", "title": "C# Uygulama Baştan Sona Ders 18 - Turnuva Formu Yaratma Bölüm 4", "creator": "Tim Corey", "length": "1h 15m 39s"})]]
Tim Corey'nin C# Başlangıçtan Bitişe Uygulama serisinin Ders 18'inde, odak ağırlıklı olarak C# WinForms (Windows Forms) içinde mantık güdümlü geliştirme üzerine kayar. Önceki derslerin kullanıcı arayüzüne, WinForms kontrollerine ve görsel düzenlerine vurgu yaptığı yere karşı, bu ders perde arkasında doğru bir şekilde çalışan bir sistem inşa etmeyle ilgilidir.
Tim tekrar tekrar bunun gerçek geliştirme çabasının başladığı yer olduğunu açıklar. Düğmeler, metin kutuları ve ortak kontroller, her olası senaryo için çalışması gereken mantığı tasarlamakla kıyaslandığında kolaydır. Bu ders, uygulamanın sadece bir demo gibi değil, gerçek bir Windows masaüstü uygulaması gibi hissettirmeye başladığı bir dönüm noktasıdır.
Tüm ders Visual Studio kullanılarak öğretilir, .NET Framework'tan yararlanır, büyümeyi destekleyen bir sınıf kitaplığı ve bir WinForms proje türü içerir.
Kullanıcı Arayüzünden Uzaklaşarak Mantık Tasarlama
Dersin başlarında Tim önemli bir noktayı belirtir: hemen kodlamaya başlamayın. Karmaşık mantığın asla bir formun kod arkasında başlamaması gerektiğini açıklar. Bunun yerine, Windows Forms uygulamasını durdurur, kağıt ve kalemi alır ve turnuva yapısını görsel olarak tasarlamaya başlar.
Bu, tasarımcıdan, araç kutusundan ve özellikler ızgarasından kasıtlı bir uzaklaşmadır. Tim, WinForms'un kapsamlı bir kullanıcı arayüzü araç seti sağladığını kabul etse de, mantığın sürüklenemeyeceğini veya bırakılamayacağını — tasarlanması gerektiğini vurgular.
Bu mantığı zaten birkaç kez yeniden yazdığını belirtir, hata düzeltmenin ve yaklaşımı yeniden düşünmenin geliştirmenin normal bir parçası olduğunu pekiştiren.
Turnuva Yapısını Kavramsal Olarak Anlamak
Tim, sistem tasarımı perspektifinden bir turnuvanın gerçekten ne olduğunu açıklar. Şunları tanımlar:
Takımlar
Eşleşmeler
Eşleşme kayıtları
Turlar
- Baylar
Her eşleşme, eşleşme girişlerini içerir ve her giriş, hangi takımı temsil ettiğini bilmeyebilir. Gelecekteki turları uygularken bu fikir kritik hale gelir.
Tim, üç takımla basit bir örnek kullanarak neden turnuvaların iki kuvvetine ihtiyaç duyduğunu gösterir. Bunun nedeniyle, baylar özel bir özellik değildir — matematiksel bir zorunluluktur.
Bu bölüm, kodla ilgili olmak yerine, daha çok bir geliştirici gibi düşünmek üzerine ve Tim, dizinin tümüne tekrar tekrar bu noktayı vurgu yapar.
Neden Bazı Takımların Null Olması Gerekiyor
Bu noktada, Tim Visual Studio'ya geçer, Çözüm Gezginini açar ve veri tabanı projesine girer. Tablo tasarımına çift tıklar ve ince ancak kritik bir gerekliliği açıklar: gelecekteki turlar henüz takımları bilemez.
Bunun sonucu olarak, TeamCompetingId alanının null değerlerine izin vermesi gerekir.
Tim, Özellikler penceresini açar, SQL Server'ın güvenlik uyarısını açıklar ve Tablo yeniden oluşturma gerektiren değişikliklerin kaydedilmesini engellemeyi geçici olarak nasıl devre dışı bırakacağını gösterir. Bu sadece tablonun boş olması nedeniyle güvenli olduğunu özenle belirtir.
Bu, geliştirme hızı, veri bütünlüğü ve gerçek dünya kısıtlamalarını dengelemenin klasik bir örneğidir.
Formları Temiz ve Odaklı Tutma
WinForms projesine dönerken, Tim bir kuralı tekrar ediyor: Formlar, iş mantığı içermemelidir.
WinForms'un düğmeye tıklama olayları içinde doğrudan mantık yazmayı kolaylaştırdığını kabul etse de, bunu yapmanın zarar verdiğini açıklar:
Bakımı
Yeniden kullanılabilirliği
Testi
- Gelecekteki platform uyumluluğu
Bunun yerine, formun sorumlulukları şunlarla sınırlıdır:
Kullanıcı arayüzünden girdi toplama
Metotlar çağırma
- Sonuçları gösterme
Bu ayrım, Windows masaüstü uygulamasını temiz ve profesyonel tutar.
TournamentLogic Sınıfını Oluşturma
Tim yeni bir sınıf kitaplığı oluşturur ve statik TournamentLogic sınıfını tanıtır. Bu sınıf, kullanıcı arayüzü, veri erişimi veya model değildir — sadece uygula mantığı için var.
Bu tasarım seçiminin aynı mantığın daha sonra yeniden kullanılmasına izin verdiğini açıklar:
WPF
ASP.NET
- Diğer .NET masaüstü veya web platformları
Bu an, WinForms'un neden hala ilgili olduğunu sessizce gösterir: doğru kullanıldığında, modern mimariyle düzgün bir şekilde entegre olur.
Takımları Adil Şekilde Rastgeleleştirme
Tim, takımların sırasını rastgeleleştirmek için bir yöntem uygular:
OrderBy(x => Guid.NewGuid())Bu yöntem kriptografik olarak mükemmel olmadığını kabul eder, ancak açıklar ki:
Basittir
Okunabilir
Desteklenir
- Daha sonra değiştirmesi kolaydır
Bu dersin yinelenen temasını şu şekilde destekler: önce doğruluğu elde edin, sonra optimize edin.
Orijinal listenin değiştirilmediğini, istenmeyen yan etkilerden kaçınarak önemle belirtir — ince ama önemli bir programlama alışkanlığı.
Toplam Turları Hesaplama
Bu bölüm beklenenden daha uzun sürer ve Tim açıkça nedenini belirtir: mantığı anlamak kolaydır.
Turları hesaplamanın yollarını döngü kullanarak formülere güvenmek yerine niyetini bulanıklaştırır. Amaç, zekadan ziyade netliktir.
Tim her durumu doğrular:
2 takım → 1 tur
3 takım → 2 tur
4 takım → 2 tur
- 8 takım → 3 tur
İzleyicileri tekrar tekrar durdurmaya, test etmeye ve izole mantığı doğrulamaya davet eder ve güvenmeden önce test eder.
Bay Sayısını Belirleme
Math.Pow kullanmak yerine, Tim kasten iki kuvvetini hesaplamak için manuel bir mantık yazar. Çiftleri önlemenin hataları azalttığını ve okunabilirliği artırdığını açıklar.
Bu bölüm, deneyimli geliştiricilerin genellikle sıkıcı, açık kodu seçmelerinin nasıl hata ayıklama ve bakımını kolaylaştırdığını gösterir.
İlk Turu Oluşturma
İlk tur benzersizdir çünkü:
Takımlar bilinir
Baylar uygulanır
- Ebeveyn eşleşmeleri yoktur
Tim, eşleşmelerin nasıl yaratıldığını, bir eşleşmenin tamamlandığında nasıl işlendiğini ve bayların bir takımı otomatik olarak nasıl ileri taşıdığını dikkatle açıklar.
Her kararın neden verildiğini açıklamak için sık sık duraklayarak, adım adım bu mantığı uygular.
İzleyen Turları Oluşturma
Daha sonraki turlar çok farklı şekilde oluşturulur. Takımlar bilinmez, bu yüzden ebeveyn eşleşmeleri kullanılır.
Tim, önceki turdan gelen eşleşmelerin bir sonraki tura nasıl aktığını, tek bir oyun oynanmadan tam bir turnuva ağacı oluşturduğunu açıklar.
Bu, tüm uygulamadaki en önemli mimari kararlardan biridir ve şunları mümkün kılar:
Skor takibi
Kazanan ilerlemesi
- Gelecekte otomasyon
Son Gözden Geçirme ve Doğrulama
Dersin son dakikalarında, Tim tam akışı gözden geçirir:
Takımlar rastgeleleştirilir
Turlar hesaplanır
Baylar atanır
Eşleşmeler oluşturulur
- Turnuva yapısı tamamlanır
Hataların beklenebilir, zamanla mantığın geliştirilebilir olduğunu ve profesyonel geliştiricilerin sürekli olarak önceki kodu daha iyi hale getirmek için geri döndüğünü vurgular.
Kapanış Düşünceleri
Ders 18, WinForms kontrolleri, sürükle-bırak kullanıcı arayüzü veya alımlı özelliklerle ilgili değildir. İşin özü, düşünmek, tasarlamak ve gerçek kullanımda hayatta kalacak kod yazmaktır.
Videonun sonunda, uygulama basit bir Windows Forms uygulamasından yapılandırılmış, ölçeklenebilir bir .NET masaüstü programına dönüştü - gerekirse WinForms'un çok ötesine geçebilir.
Bu, öğrenmenin akademik olmayı bırakıp, profesyonel olmaya başlandığı anda gelinen yerdir.

