C# Modüler Çalışma Mantığı, yazımız ile c sharp eğitimlerimize devam ediyoruz. C sharp modüler çalışma mantığı dediğimize bakıp ta öyle aham şaham bir konu olarak düşünmeyin. Genel anlamda düzenli çalışmayı kastediyoruz. Bir grup içerisinde de çalışsanız, tek başınıza da çalışsanız modüler çalışma mantığı önemli bir konudur. Kodlarınızın, formlarınızın ve diğer parçalarınızın düzenli bir şekilde olması ve aradığınızı hızlı bir şekilde bulmanızı sağlamaktadır.
C Sharp Modüler Çalışma Mantığı
Şimdi gelelim bu iş nasıl oluyor. Direk bu yazıma geldiyseniz öncelikle Yazılıma Başlamak Mı İstiyorsunuz? Görmeniz Lazım! yazımı okumanızı tavsiye ederim. Genel olarak bu yazımda bir çok konuya değindim.
İşin özü her form, her class kendi klasörü içerisinde olmasıdır. Her ne kadar küçük projede uğraşıyor olsanız da bu yapıya dikkat etmeniz sizi hem pro göstecektir hemde işinizi kolaylaştıracaktır. Kaldı ki yarın birgün projelerinizi birleştirmek istediğinizde bu işlemi çok çok kısa bir sürede yapabileceksiniz. Özellikle bu son dediğimi tecrübe ederek öğrendim.
Mesela bir ön muhasebe programı yazacaksınız. Öncelikle klasörlerinizi açın. Bunlar şöyle olabilir, Stok, Cari, Depo, Tahsilat…. Stoklarla ilgili tüm formları Stok klasöründe olsun. Cari işlemleri ile ilgili olanlarda Cari klasöründe… Çok sık kullandığınız kod bloklarını hemen bir class’ a çekin. Atıyorum, Metodlar diye bir klasör açın tüm class’lar bu klasörde olsun. Yine atıyorum Kullanıcı Girişi formu, Yetkilendirme Formu gibi sistematik işlemler için Sistem klasörü açıp bu formları o klasöre taşıyın. Duygusal olarak, solution explorer’e baktığınızda gözünüze hoş görünsün. :D Mesleki olarak da başka bir yazılımcı ile çalışmaya başladığınızda kodlarınızı daha hızlı çözüp projeye daha hızlı adapte olacaktır.
Başıma gelen bir olayı anlatayım. Bir arkadaşım, bir proje geliştirmeye başladığını ama bir iki yerde takıldığı ve ona yardımcı olup olamayacağımı sordu. Bende projeyi gönder bakayım dedim. Projeyi gönderdiğinde projeyi açtım sol tarafa baktım ki çorba gibi. Class’ların bir ikisi dışarıda biri bir klasörde diğeri başka klasörde. Hayır o değil önce klasör açmış, klasörün içine form açmış. Sonra beğenmemiş formun yerini değiştirip klasörü silmiş. Tabi gidip formun içinde namespace’i düzeltmediğinden normalde var olmayan klasör adını yazıp çağırmak gerekiyor. Form orada duruyor ama kod ile çağıramıyorum. :D C# NameSpace Kavramı dersimin sonunda bu konudan bahsetmiştim.
Neyse projedeki tüm formları kendime göre klasörledim, class’ları ayırdım başka bir düzeltme yapmadan geri gönderdim. Akşamına sorunlarını çözdüğünü ve “Aga resmen malca iş yapmışım” diye mesaj atmıştı.
Dostlar, program yazarken çok kod yazmaya değil en az şekilde kod yazmaya çalışın. Bu sizlerin ufkunu genişletecektir. Yeni şeyler öğrenmeye itecektir. En basit örneği database üzerinde her işlem yapacağınızda connectionstring yazmak akıllıca değildir. Bunu söylüyorum çünkü bu anlattığım da modüler çalışmaya giriyor. Bir kere yaz sürekli kullan. Sorun çıktığında bakacağın yeri bil.
Konusu geçmişken daha bugün yazdığım bir kodu sizlerle de paylaşacağım.
Yaptığım iş şöyle, Bir yetkilendirme sayfası var. Listeden kullanıcıyı seçiyorsunuz ve checkbox’lar ile yetki açıp kapatıyorsunuz. Saydım, formda tam 186 adet checkbox var. Yapacağım iş ise, checkbox’un checkedChanged eventi içinde işaretlendi mi? işareti kaldırıldı mı? kontrolünü yapıp sql e kaydetmek.
Şimdi bu ne demek? 186 tane checkedChanged eventi demek. Benzer kodları 186 kere yazmam demek. Değil mi?
Bu iş için yazdığım kodların hepsi bu kadardır.
private void chk_CheckedChanged(object sender, EventArgs e) { CheckEdit chk = sender as CheckEdit; int i = Convert.ToInt16(chk.CheckState); if (Metodlar.Yetkilendirme.Yetki_Yaz(KullaniciKodu, Convert.ToInt16(chk.Tag), i.ToString(), chk.Text) == "1") chk.CheckState = CheckState.Checked; else chk.CheckState = CheckState.Unchecked; }
Burada ben ne yaptım?
- Her yetkinin bir numarası var. Atıyorum 100 nolu, 101 nolu yetki yada parametre neyse.. Bu kodları properties ekranından checkbox’ların tag özelliğine yazdım.
- Yetkinin ne olduğu açık bir şekilde checkbox’ların text’ine yazdım.
- Metodlar adındaki class larim için açtığım klasöre Yetkilendirme adında bir class daha oluşturdum.
- Bir event oluşturdum ve bu eventi özellikler sayfasında ki eventler sayfasından ilgili 186 checkbox’un checkedChanged eventine atadım.
Event olduğundan, CheckEdit chk = sender as CheckEdit; satırı ile object sender üzerinden nesnenin ne olduğunu buldum ve bulduğum nesnenin tüm özelliklerini chk adlı kendi sanal nesneme atamış oldum. Artık chk ile her zaman işlem yaptığım checkBox bilgileri elimde olacak.
chk.CheckState komutu ile işaret durumunu yani true yada false bilgisini int olarak aldım. Bana 1 yada 0 olarak lazım olduğu için.
Son olarak da string olarak hazırladığım metoda parametrelerini gönderdim ve yetkileri kaydetmiş oldum.
- KullaniciKodu = Yetkilendirme yapacağım kullanıcının kodunu kullanıcılar listesinden almıştım.
- Convert.ToInt16(chk.Tag) = Yetki kodunu checkBox’ların tag özelliğine yazmıştım. Yetkiyi kaydederken de tag kısmında yazan sayıyı aldım.
- i.ToString() = Checkbox’un işaret durumunu almıştık.
- chk.Text = Checkbox’un text özelliğinde de yetkinin ne olduğunu yazmıştık. Database’e de yetki açıklaması olarak kaydediyoruz.
İlk dediğimiz şekilde yapsaydık, 1863 ek olarak 1864 yani toplamda 1302 satır kod yazacaktık ama biz bu işi 9 satırda çözmüş olduk. Hadi 11 satırda yeki class’ımızdaki kodları sayalım 20 satır olsun.
Az Kod Çok İş
Ha şunu da söyleyebilirim. Bu yazdığım kodları bile kısaltabilirim. Yazımda bir kaç hatam da yok değil. Mümkün mertebe hızlı bir şekilde bitirmem gereken bir proje olduğundan bazı şeylere dikkat etmedim. Bu dersi yazarken kendi kendime “Bu böyle mi yapılır la?” dediğim de doğrudur. :D
Mesela kodlar şöyle olabilirdi..
private void chk_CheckedChanged(object sender, EventArgs e) { CheckEdit chk = sender as CheckEdit; chk.Checked = Metodlar.Yetkilendirme.Yetki_Yaz(KullaniciKodu, Convert.ToInt16(chk.Tag), Convert.ToBoolean(chk.CheckState);, chk.Text); // bool değer döndüren metod }
:D
Gördüğünüz gibi bu şekilde yazdığımız kod hem anlaşılır, hem göze hoş görünen, hem profesyonelcedir. En azından ben böyle düşünüyorum.
İşte C Sharp modüler çalışma mantığı böyle birşey. C sharp dediğime bakmayın bu hemen hemen tüm programa dilleri için geçerlidir. Bu yazımızı da burada bitirelim. Diğer c sharp eğitim derslerimizde görüşmek üzere.
C Sharp Eğitim Seti ve ERP Programlama ders listesi için tıklayınız.
Takipte ve sağlıcakla kalın. ;)
Tecrube çok çok onemli tabiki tbr
Derslerinizi anlıyorum.Fakat uygulamalı özel ders almak istiyorum. teşekkürler ederim..
Merhaba, numaranızı sildim. Lütfen telefon numaranızı her yerde bu şekilde paylaşmayın. Ek olarak, özel ders vermiyorum. Yaptığım yardımlardan ücret talep etmiyorum. Mail adresim üzerinden sorular sorarsanız veya discord’a katılırsanız sorularınızı cevaplamaya çalışırız. İyi günler dilerim.