<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kod Yazım Şekli arşivleri - Dinamik Network</title>
	<atom:link href="https://dinamiknetwork.com/e/kod-yazim-sekli/feed/" rel="self" type="application/rss+xml" />
	<link>https://dinamiknetwork.com/e/kod-yazim-sekli/</link>
	<description>Bilişim Dünyasına Profesyonel Yaklaşım</description>
	<lastBuildDate>Fri, 25 Aug 2023 13:32:04 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.12</generator>

<image>
	<url>https://dinamiknetwork.com/wp-content/uploads/2020/01/cropped-ikon-1-1-32x32.png</url>
	<title>Kod Yazım Şekli arşivleri - Dinamik Network</title>
	<link>https://dinamiknetwork.com/e/kod-yazim-sekli/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bir Yazılım Projesine Başlamak- Tavsiyeler #5</title>
		<link>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-5/</link>
					<comments>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-5/#respond</comments>
		
		<dc:creator><![CDATA[Mustafa Bükülmez]]></dc:creator>
		<pubDate>Fri, 27 Dec 2019 06:00:58 +0000</pubDate>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Az Koda Çok İş Yaptırmak]]></category>
		<category><![CDATA[Basit Düşünmek]]></category>
		<category><![CDATA[Bir Yazılım Projesine Başlamak]]></category>
		<category><![CDATA[Hızlı Kod Yazmak]]></category>
		<category><![CDATA[Kod Yazım Şekli]]></category>
		<category><![CDATA[Kodlama Mantığı]]></category>
		<category><![CDATA[proje geliştirmede çevresel etkenler]]></category>
		<category><![CDATA[Projelerde Yetkilendirme Yöntemleri]]></category>
		<guid isPermaLink="false">https://dinamiknetwork.com/?p=994</guid>

					<description><![CDATA[<p>Bu yazı serisi işin bir alaylısı olarak, tecrübelerimden derlediğim bir yazılım projesine başlamak – dikkat edilmesi gerekenler  konusunun 5. yazısıdır.  Bu yazıda göreceğiniz şeylerin her&#46;&#46;&#46;</p>
<p>The post <a rel="nofollow" href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-5/">Bir Yazılım Projesine Başlamak- Tavsiyeler #5</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Bu yazı serisi işin bir alaylısı olarak, tecrübelerimden derlediğim <strong>bir yazılım projesine başlamak – dikkat edilmesi gerekenler </strong> konusunun 5. yazısıdır.  Bu yazıda göreceğiniz şeylerin her hangi birini bir yerde bulmanızın imkansız olduğu düşünüyorum. Sayısız araştırmalar yaparak ve sayısız proje geliştirerek geçirdiğim, 5 yıldan fazla sürede elde ettiğim tüm püf noktaları paylaşıyor olacağım.</p>
<p>Önceki yazımda<a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-4/" target="_blank" rel="noopener noreferrer"><strong> Bir Yazılım Projesine Başlamak</strong>&#8211; Tavsiyeler #4</a>, <b>hızlı kod yazmak</b> hakkında da konuşmuştuk. Bu yazının sohbet konusu ise <strong>Projelerde Yetkilendirme Yöntemleri </strong>üzerine olacak. Bu yazım önceki yazılarım ile bağlantılı olacak ve onlardan bir çok referans içerecek.</p>
<p>&nbsp;</p>
<h2><strong>Bir Yazılım Projesine Başlamak- Tavsiyeler #5</strong></h2>
<p>Yetkilendirme konusu her zaman sıkıntılı bir süreç olmuştur benim için. Projeye uygun bir yetkilendirme yöntemi tasarlamak gerçekten zor oluyor. Ya tek bir yetkilendirme yöntemi geliştirip üretilen her projede kullanacağız ya da projeye özel yöntemle geliştireceğiz. Ancak küçük projelere aşırı detaycı yetkilendirme yöntemi geliştirmek mantıksız oluyor ve gereksiz iş yükü getiriyor. O halde bu yetkilendirme işlemlerini nasıl belirlemeliyiz?</p>
<p>Bu yazımın konusu da tam olarak bu soruya cevap vermeye odaklıdır. Aşağıda, her türlü projeniz için kullanabileceğiniz, esnek ve geliştirilebilir bir yöntem yer almaktadır.</p>
<p>Yetki Parametreleri yöntemini kullanmak için bir dosya (xml olabilir) yada veri tabanımızda bir tablo açmamız gereklidir. Bu tablo üzerinden kullanıcı bazlı yetkilendirmeler yapılabilir. Bu yöntemi sağlıklı bir şekilde kullanabilmek ve geliştirebilmek adına etraflıca düşünülmesi gerekmektedir.</p>
<h3><strong>Yöntemin Kodlanması</strong></h3>
<p>Bu bağlamda, Bu yazı serisinin birinci yazısı olan <strong><a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-1/" target="_blank" rel="noopener noreferrer">Kodlama Mantığı</a></strong> ve ikinci yazısı olan <a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-2/" target="_blank" rel="noopener noreferrer"><strong>Basit Düşünmek</strong> ve <strong>Proje Geliştirmede Çevresel Etkenler</strong></a> yazılarındaki konulara dikkat edilmesi gerekiyor.</p>
<p>Kodlama mantığı altında ilk olarak Proje Geliştirmede Çevresel Etkenler yer alıyor. Yani iş verenin ve kullanacıların neleri yapabilip neleri yapamaması gerektiğini belirlemeliyiz. Örneğin Satın Alma Departmanında çalışan bir kişi, stok tanımlarını, eldeki stokları ve maliyet ve satış fiyatlarını görebilir ama yeni stok tanımı yapamaz. Görebileceği stoklar sınırlıdır ve sadece MAMÜL olarak satılabilen stokları görebilir.</p>
<blockquote><p><strong>İPUCU</strong>: Fark ettiniz değil mi? Eğer bu noktada stokların kodlamasına bu bilgiyi eklersek sorgulamalar ne kadar kolaylaşacak. Stok kodlarında, <em>hammadde, yedek parça, yarı mamül, mamül</em> gibi ana grupların kodlarını verirsek satış departmanının, hangi stokları görmesi isteniyorsa stokların ilgili kodları üzerinden kolaylıkla yetkilendirme yapabiliriz.</p></blockquote>
<p>Düşünüldüğünde satış departmanının yedek parça stokları ile hiçbir alakası yok. O zaman neden kendisi ile alakası olmayan stokları da görmek istesin ki? Hem sadece kendisini ilgilendiren stokları görebilmesi hemde bu stoklardan ellerinde kaçar tane olduklarını görmesi gerekir.</p>
<p>Maliyet ve satış fiyatı konusunda ise satış departmanında çalışan her personelin maliyetleri bilmesini istemeyebiliriz. Sadece satış fiyatlarını görsün ve müşterisine o fiyatları söylesin. Müşteri eğer iskonto isterse amirine yönlendirsin. Stokların maliyetlerini de görebilen amir ise hem müşteriyi memnun edecek hemde şirketin zarar etmemesini sağlayacak kadar iskonto uygulayabilir.</p>
<p>Buraya kadar bahsettiğimiz senaryo üzerinden ilerleyelim.</p>
<p>&nbsp;</p>
<h4><strong>Nasıl bir yetki parametresi üretebiliriz?</strong></h4>
<p>Diyelim ki, yetkilendirme parametrelerinde, satış departmanı ana yetki grubu  10 olsun. 10 ile başlayan her yetki parametresi satış departmanı ile ilgili olacak. Şimdi kodlamamıza başlayabiliriz. Ben excel üzerinde örnek bir kodlama yaptım. Aşağıda görebilirsiniz.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-1006" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemler-1i.jpg" alt="Bir Yazılım Projesine Başlamak- Projelerde Yetkilendirme Yöntemler 1i" width="1072" height="313" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemler-1i.jpg 1072w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemler-1i-768x224.jpg 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemler-1i-850x248.jpg 850w" sizes="(max-width: 1072px) 100vw, 1072px" /></p>
<p>Burada bir kodlama mantığı kullanarak yetkilendirme yöntemi oluşturdum. Bu yöntem yukarıda gördüğünüz gibi çok detaylı bir yetkilendirme yöntemi gerektiren projeler için kullanılması mantıklı olabilir. <em>Eğer projemiz çok küçük ve detaylı yetkilendirme yöntemi gerekmiyor ise basitçe Yetki kodları 1&#8217;den başlayarak artan sayılar olabilir. </em></p>
<p>Yukarıdaki görseli incelediğimizde sırası ile tüm satış departmanı kullanıcılarına tek tek hangi tür stokları görebileceğini belirledik.  Sonrasında kayıt edilen siparişler üzerinde yapılabilecek işlemler hakkında yetkilendirme yaptık. Görselde görünen detaylar daha da detaylandırılabilir. Aşağıdaki görselde olduğu gibi&#8230;.</p>
<blockquote><p>NOT: Burada sadece stoklar üzerinden örnek verdim ama bu mantık Cariler de geçerli. Biliyorsunuz cariler 120 ve 320 olarak ayrılırlar. Başlıca bu carilerden hangi grubu görebileceğini yetkilendirebiliriz.</p></blockquote>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-1009" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemleri-2.jpg" alt="" width="1056" height="184" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemleri-2.jpg 1056w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemleri-2-768x134.jpg 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-Projelerde-Yetkilendirme-Yöntemleri-2-850x148.jpg 850w" sizes="(max-width: 1056px) 100vw, 1056px" /></p>
<p>Kullanıcıya sadece kendi kayıtları ya da diğer kullanıcıların açtığı kayıtlar üzerinde de yetki verebiliriz.</p>
<blockquote><p>NOT: Bu detaylar ne kadar çok artar ise o kadar dikkatli olmaz gerekir. En ufak bir çakışma felakete yol açabilir. 🙂</p></blockquote>
<p>&nbsp;</p>
<h3><strong>Yöntemin Programlanması</strong></h3>
<p>Veri tabanımızda açtığımız Parametreler tablosunda bu kayıtları tutarak, kullanıcı formları gezerken ilgili parametreleri veri tabanından okuyarak yetkilendirmeleri yapmış oluruz. Örneğin kullanıcı Siparişler Listesi formunda geldiğinde kullanıcının yetkilerine göre formda kullandığınız butonları ve menüleri gizle/göster ya da aktif/pasif yaparak, kullanıcıyı yetkileri dahilinde yönlendirebilirsiniz.</p>
<p>Bu mantığı oturttuktan sonra yapılan ilk iş bir yetkilendirme formu olmalıdır. Yeni yetki ana ve alt grupları oluşturabilecek ve oturttuğunuz mantığa uygun olarak bir kaydetme, güncelleme ve silme yapabileceğiniz bir form. Bunu yaptıktan sonra da kullanıcının yetkilerini veritabanından okuyup formdaki ilgili işlemleri açıp kapatabilecek bir class oluşturmalısınız.</p>
<p>Son söylediklerim için ise bir yazılım projesine başlamak yazı serimin üçüncü yazısı olan<a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-3/" target="_blank" rel="noopener noreferrer"><strong> Kod Yazım Şekli</strong> ve <strong>Az Koda Çok İş Yaptırmak</strong></a> ile dördündü yazısı olan <strong><a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-4/" target="_blank" rel="noopener noreferrer">Hızlı Kod Yazmak</a></strong> yazılarındaki konulara dikkat edilmesi gerekiyor.</p>
<p>&nbsp;</p>
<hr />
<p>Evet arkadaşlar<strong> Bir Yazılım Projesine Başlamak </strong>&#8211; Tavsiyeler #5  yazımda bu kadar olsun. <strong>Projelerde Yetkilendirme Yöntemleri</strong> hakkında konuştuk. Aslında birden fazla yöntemden bahsedecektim ama aklımdaki diğer yöntemler teoriden ibaretti. Bu sebeple onları yazmaktan vazgeçtim. Yukarıda verdiğim mantık her proje türü için kullanılabilir.</p>
<p>Eğer ilginizi çekebildiysem o zaman takipte kalın. Yeni bir yazının ne zaman geleceği belli değil.</p>
<p>Yazılım konusunda daha fazla içerik için <a href="https://dinamiknetwork.com/k/yazilim/" target="_blank" rel="noopener noreferrer">tıklayabilirsiniz</a>.</p>
<p>&nbsp;</p>
<hr />
<p>Bana destek olmak isterseniz <strong><a href="https://www.buymeacoffee.com/mustafabukulmez" target="_blank" rel="noopener">bir kahve ısmarlayabilirsiniz</a></strong> veya <strong><a href="https://linktr.ee/mustafabukulmez" target="_blank" rel="noopener">diğer hesaplarımdan</a></strong> takip edebilirsiniz.</p>
<p>The post <a rel="nofollow" href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-5/">Bir Yazılım Projesine Başlamak- Tavsiyeler #5</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bir Yazılım Projesine Başlamak- Tavsiyeler #3</title>
		<link>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-3/</link>
					<comments>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-3/#comments</comments>
		
		<dc:creator><![CDATA[Mustafa Bükülmez]]></dc:creator>
		<pubDate>Sat, 14 Dec 2019 17:00:08 +0000</pubDate>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Az Koda Çok İş Yaptırmak]]></category>
		<category><![CDATA[Basit Düşünmek]]></category>
		<category><![CDATA[Bir Yazılım Projesine Başlamak]]></category>
		<category><![CDATA[C# User Control Nedir]]></category>
		<category><![CDATA[Kod Yazım Şekli]]></category>
		<category><![CDATA[proje geliştirmede çevresel etkenler]]></category>
		<category><![CDATA[User Control Kullanmak]]></category>
		<guid isPermaLink="false">https://dinamiknetwork.com/?p=850</guid>

					<description><![CDATA[<p>Bu yazım işin bir alaylısı olarak, tecrübelerimden derlediğim bir yazılım projesine başlamak – dikkat edilmesi gerekenler  konusunun 3. yazısıdır.  Bu yazıda göreceğiniz şeylerin her hangi&#46;&#46;&#46;</p>
<p>The post <a rel="nofollow" href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-3/">Bir Yazılım Projesine Başlamak- Tavsiyeler #3</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Bu yazım işin bir alaylısı olarak, tecrübelerimden derlediğim <strong>bir yazılım projesine başlamak – dikkat edilmesi gerekenler </strong> konusunun 3. yazısıdır.  Bu yazıda göreceğiniz şeylerin her hangi birini bir yerde bulmanızın imkansız olduğu düşünüyorum. Sayısız araştırmalar yaparak ve sayısız proje geliştirerek geçirdiğim, 5 yıldan fazla sürede elde ettiğim tüm püf noktaları paylaşıyor olacağım.</p>
<p>&nbsp;</p>
<p>Önceki yazımda<a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-2/" target="_blank" rel="noopener noreferrer"><strong> Bir Yazılım Projesine Başlamak</strong>&#8211; Tavsiyeler #2</a>, sadece <strong>Basit düşünmek</strong> üzerine değil<strong> proje geliştirmede çevresel etkenler </strong>hakkında da konuşmuştuk. Bu yazının sohbet konusu ise <strong>Kod Yazım Şekli ve Az Koda Çok İş Yaptırmak</strong> üzerine olacak. Elbette bu yazıda yazılım sektöründeki yazım kuralları vs hakkında olmayacak.</p>
<p>Mesela, <em>&#8220;Değişken adları her zaman küçük harf ile başlamak zorundadır!&#8221;</em> bu yazıda bu tarz şeyler yok. Hiçbir yazımda da olmayacak!</p>
<p>Peki, ben nasıl kod yazıyorum? Kod yazarken nelere dikkat ediyorum? Tüm bunları bu yazıda göreceksiniz.</p>
<p>&nbsp;</p>
<h2><strong>Bir Yazılım Projesine Başlamak- Tavsiyeler #3</strong></h2>
<p>Öncelikle şu mantığı aklınıza kazımanızı istiyorum.</p>
<blockquote><p><strong><em>&#8220;</em><em>Aynı kodları iki kere yazıyorsan bir hata var.&#8221; </em></strong></p></blockquote>
<p>Örnek vermek gerekirse, Access Veri Tabanı ile çalışan bir uygulama geliştiriyorsunuz. Access Veri Tabanına bağlantı kodlarını yazdınız. Form Load eventinde öğrenciler tablosundan verileri almak istiyor ve bir gridde göstermek istiyorsunuz.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source=okul.accdb");
OleDbDataAdapter da = new OleDbDataAdapter("SElect *from ogrenciler", con);
DataSet  ds = new DataSet();
con.Open();
da.Fill(ds, "ogrenci");
dataGridView1.DataSource = ds.Tables["ogrenci"];
con.Close();</pre>
<p>Amacımıza ulaşmak için bu kadar çok kod yazmalıyız. Formumuza birde liste güncelle butonu koymuş olsak ve o butonun click eventinde yine yukarıdaki kodların aynısını yazmak zorundayız.</p>
<p>Başka formlarda, başka listeleri göstermek için yine yukarıdaki kodları yazmalıyız. Yani ne zaman gridde veri göstermek istersek yukarıdaki 7 satır kodu tekrar tekrar yazmalıyız. Ayrıca verileri okuyup nesnelerde göstermek ya da kayıt güncelleme öncesi verileri, nesnelere yazmayı da hesaba katabilirsiniz. Verileri bir datatable&#8217;ye yükleyip nesnelere yazmak içinde yukarıdaki kodları kullanırsınız.</p>
<ul>
<li><em>Mantıklı mı? <strong>Cevap: Hayır</strong></em></li>
<li><em>Doğru bir yol mu? <strong>Cevap : Hayır</strong></em></li>
<li>Hızlı kod yazmanızı sağlar mı? <em><strong>Cevap : Hayır</strong></em></li>
<li>Projenizi hızlı bitirebilmenizi sağlar mı? <em><strong>Cevap : Hayır</strong></em></li>
<li>Bugları ve çıkan hataları ayıklamak kolay mı? <em><strong>Cevap : Hayır</strong></em></li>
<li>Upgrade* (Sürüm yükseltme vs.) yapmayı hızlandırır mı? <em><strong>Cevap : Hayır</strong></em></li>
<li><em>Kod yazmak böyle mi olmalı? <strong>Cevap: Hayır</strong></em></li>
<li><em>Ne kadar çok satır o kadar iyi mi?<strong> Cevap: Hayır</strong></em></li>
<li><em>Yazılımcının iyisi, kaç satır kod yazdığı ile mi belirlenir? <strong>Cevap: Hayır</strong></em></li>
</ul>
<p><em><strong><span style="color: #ff0000">Update*</span> = Güncellemek, Değiştirmek&#8230;  </strong></em><em><strong><span style="color: #ff0000">Upgrade*</span> = Sürüm Yükseltmek, Seviye Yükseltmek&#8230;</strong></em></p>
<p>Bir de Access Veri Tabanında veri işlemleri var. Ekleme, Silme, Güncelleme işlemleri için de ortalama yukarıdaki kadar kod yazacağız. Şimdi düşünün, kullandığınız veri tabanı değiştiğinde ne yapacaksınız? Ya da Connection String cümlenizi değiştirmek istediğinizde? Her nerede yukarıdaki kodları yazdıysanız tek tek oralara gidip gerekeli değişiklikleri yapacaksınız. Büyük bir proje ise ne kadar büyük bir hammalık yapacaksınız hayal edebiliyor musunuz?</p>
<p>Bu kodları yazarken kaybettiğiniz zamanda tuzu biberi&#8230; Bu yazıyı tamamen okuduktan sonra projenizi açın ve sık kullandığınız kodlarınızı class&#8217;lara çekin. Çok geç olmadan&#8230;</p>
<p>Peki böyle sıkıntılara düşmemek için ne yapacağız?. <strong>Az Koda Çok İş Yaptırmak Tabi ki!</strong></p>
<blockquote><p>Ne demiş <strong>Arşimet</strong> <em>&#8220;Bana yeterince uzun bir kaldıraç ve sağlam bir dayanak noktası verin, dünyayı yerinden oynatayım.&#8221;</em></p></blockquote>
<p>Bizde bu mantıkla  class ve user contol kullanarak dünyalar yazacağız. 😀  İşte bu yazının size katmayı hedeflediği şeyler şuanda başlıyor.</p>
<p>&nbsp;</p>
<h3><strong>Metod Kullan! Class Kullan!</strong></h3>
<p>Burada yapılması gereken şey Metod ve Class kullanmaktır. Yukarıdaki örnekte olan kodları ve diğer işlemler için gerekli kodları bir Class dosyasında toplarsınız. Yapacağımız Class&#8217;ın adı <strong>MyAccessClass</strong> olsun ve verileri listeleme için kullanacağımız metodumuzun adı da <strong>ShowTable </strong>(Gerid dönüşü DataTable dönen bir metod) olsun. Bu Class&#8217;ımızı ve Metod&#8217;umuzu hazırladıktan sonra kullanım şekli aşağıdaki gibi olacaktır.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">dataGridView1.DataSource = MyAccessClass.ShowTable("Select * from ogrenciler);</pre>
<p>7 satırdan 1 satıra düşürdük. Yüzlerce formda listeleme yaptığımızı hayal edersek&#8230; Ne büyük bir kolaylık değil mi? Şimdi yukarıdaki sorulara tekrar dönelim ve düşünelim. Neden cevapların Hayır olduğunu daha net anladınız değil mi? Sadece verileri girdde gösterme değil, verileri ekrana doldurmak için verileri datatableye yüklerken, yada veriyi güncellemek amacı ile formdaki nesnelere yüklemek için verileri datatableye yüklerken de aşağıdaki kod satırını kullanırız.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">DataTable dt_ogrenciler = MyAccessClass.ShowTable("Select * from ogrenciler);</pre>
<p>Aynı şekilde onlarca örnek verebilirim.</p>
<p>Mesela, Mail Gönderme işlemi&#8230; Sık sık kullanırız değil mi? 10, 15 satırlık bir kod bloğudur mail gönderme kodları. Proje de onlarca yerde kullandığımızı düşünsenize&#8230; KORKUNÇ!</p>
<p>&nbsp;</p>
<h3>Tek Nesnede Farklı İşlemler!</h3>
<p>Genellikle kayıt yaptığımız ekranlarda hem kayıt etme hemde kayıt güncelleme işlemi yaparız. Ve yine genellikle ekranda hem Kaydet hemde Güncelle butonları koyarız. Bir buton kayıt eder, diğeri ise günceller&#8230; <em>Ama bu doğru yöntem mi?<strong> Cevap: Hayır! </strong></em></p>
<p>O halde ne yapmalıyız? Nasıl bir yol izlemeliyiz ki tek buton kullanarak hem kayıt yapalım (insert) hemde güncelleme (update) yapalım.</p>
<p>Kaydı güncellemek istediğimizde, ilgili kaydın bilgilerini ekrana doldururuz. Bu doldurma esnasında bir değişken olarak yada ekrana bir nesne koyarak o nesneye, kaydın ID&#8217;sini de yazın. Form Load&#8217;da bu değişkeni 0 (sıfır) olarak ayarlayın yada nesneye 0 (sıfır) yazın. Kaydet butonunun click eventine bir IF koyarak şunu yapın.</p>
<p>Eğer bu ID verisi 0 (sıfır) değil ise güncelleme kodlarını, eğer bu ID verisi 0 (sıfır) ise kaydetme kodlarını çalıştırın. Örnek kod&#8230;</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">// değişken ise
if(ogrenci_ID == 0)
{
    // kaydetme kodları
}
else
{
    // güncelleme kodları
}

// nesne ise
if(Convert.ToInt32(txt_Ogrenci_ID.Text) == 0)
{
    // kaydetme kodları
}
else
{
    // güncelleme kodları
}
</pre>
<p>Bu basit bir örnekti. Şimdi biraz daha komplex bir örnek vereyim.</p>
<p>Diyelim ki ekranda 3 tane <em>(yada 10 tane fark etmez)</em> DataGridView var. Her birine sağ tık menüsü (Context Menü Strip) eklemek istiyorsunuz. Bu sağ tık menüsüne de &#8220;Listeyi Yenile&#8221;, &#8220;Dışarı Aktar&#8221; ve daha fazlasını eklemek istiyorsunuz. Normal şartlarda forma 3 tane Context Menü Strip nesnesi eklemeniz gerekiyor değil mi? (10 tane DataGridView varsa 10 tane eklenecek. Oww!)</p>
<ul>
<li>Üstelik her birine aynı menüleri ekleyeceksiniz.</li>
<li>Belki bir tanesine bir kaç tane daha fazla menü ekleyeceksiniz.</li>
<li>Belki 3 DataGridView içinde aynı sayıda ama farklı menüler ekleyeceksiniz.</li>
</ul>
<p>Şimdi size tek bir Context Menü Strip &#8216;i 3 DataGridView için nasıl kullanabilirsiniz onu anlatacağım.</p>
<p>Forma bir tane Context Menü Strip eklediniz ve bu nesneye istediğiniz menüleri de eklediniz. Tüm farklı menüleri, sırayla ekleyin.</p>
<p>İlk olarak DataGridView&#8217;leri doldurduğunuz kodları birer metod içinde alın ve bu metoları da Context Menu Strip &#8216;deki &#8220;Listeyi Yenile&#8221; menüsünün click eventine ekleyin. Kodlar öyle görünecek.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption=""> private void listeyiYenileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            grid1_Guncelle();
            grid2_Guncelle();
            grid3_Guncelle();
        }</pre>
<p>Bu en basiti idi. Şimdi gelelim &#8220;Dışarı Aktar&#8221; kodlarına. Elbette burada dışarı aktarma kodları vermeyeceğim.</p>
<p>Buradan sonra anlatacaklarım diğer konu başlığına giriyor. Bu yüzden devamını diğer başlığımızın altında vereceğim.</p>
<p>&nbsp;</p>
<h3><strong>Birçok Nesneye Tek Event!</strong></h3>
<p>Şimdi burada yapacağımız şey şu&#8230;.</p>
<p>Sağ tıkladığımız DataGridView&#8217;i elimize almamız gerekiyor. Hangi DataGridView üzerinde sağ tık yaptık bulmalıyız. Şimdi bunun için bir <strong>MouseDown</strong> eventi yazacağız ve formdaki tüm DataGridView&#8217;lere aynı eventi atayacağız.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">        DataGridView grid; 
        private void dataGridView_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                grid = sender as DataGridView;
            }
        }</pre>
<p>Bir DataGridView nesnesi tanımladık. Sağ tıklayacağımız tüm DataGridView&#8217;leri bu tanımladığımız yeni DataGridView&#8217;e atayacağız.  DataGridView üzerinde faremizden bir tuşa bastığımızda yukarıdaki event çalışır. Bizde, if ile eğer sağ tık yaptıysak; hangi DataGridView tıkladıysak, tanımladığımız DataGridView&#8217;e  sağ tıkladığımız DataGridView&#8217;i yüklüyoruz.</p>
<blockquote><p><strong>NOT</strong>: Burada sağ tıkladığımız DataGridView tamamen tanımladığımız gride yüklenir. Eğer içinde veri varsa, verilerde yüklenir.</p></blockquote>
<p>Sağ tıkladığımız DataGridView&#8217;i artık bildiğimize göre artık kodlarımızı yazabiliriz. Context Menu Strip&#8217;e eklediğimiz &#8220;Dışa Aktar&#8221; menüsünün click eventine geliyoruz ve kodlarımızı yazıyoruz.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">      private void dışaAkarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Disari_Aktar(grid);
        }

        void Disari_Aktar(DataGridView grid)
        {
            // dışarı aktarma kodları
        }</pre>
<p>Burada gördüğünüz gibi her DataGridView için tek tek &#8220;Dışa Aktarma&#8221; kodları yazmadık. Sadece bir kere yazdık ve tüm DataGridView&#8217;ler için kullanacağız.</p>
<blockquote><p><strong><span style="color: #ff0000">DİKKAT: Tabi bu sadece bir senaryo ve örnektir. Gerçekten böyle bir işlemi asla formlar içinde tutmam. Bu kodların yeri direk olarak Class dosyasıdır. Konuyu açıklamak için örnek olması açısından bu şekilde anlatıyorum.</span></strong></p></blockquote>
<p><span style="color: #000000">Yukarıda DataGridView&#8217;lere özel menüler varsa demiştik. </span></p>
<p><span style="color: #000000">Örneğin, DataGridView1 için XXXX menüsü, DataGridView2 için ZZZZ menüsü, DataGridView3 içinde YYYY özel menüsü olsun. Bunların hepsini de Context Menu Strip&#8217;e ekledik. Context Menu Strip&#8217;in Opening Eventine gelelim ve menüleri, sağ tıkladığımız DataGridView&#8217;e göre gösterip gizleyelim.</span></p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {

            switch (grid.Name)
            {
                case "dataGridView1":
                    XXXX_ToolStripMenuItem.Visible = true; // Context Menu'ye eklediğimiz XXXX menüsünün adı bu şekilde olur.
                    YYYY_ToolStripMenuItem.Visible = false; // Context Menu'ye eklediğimiz YYYY menüsünün adı bu şekilde olur.
                    ZZZZ_ToolStripMenuItem.Visible = false; // Context Menu'ye eklediğimiz ZZZZ menüsünün adı bu şekilde olur.
                    break;
                case "dataGridView2":
                    XXXX_ToolStripMenuItem.Visible = false;
                    YYYY_ToolStripMenuItem.Visible = true;
                    ZZZZ_ToolStripMenuItem.Visible = false;
                    break;
                case "dataGridView3":
                    XXXX_ToolStripMenuItem.Visible = false;
                    YYYY_ToolStripMenuItem.Visible = false;
                    ZZZZ_ToolStripMenuItem.Visible = true;
                    break;
            }
        }</pre>
<blockquote><p>İlk başlığımız nedi?<strong> Az koda çok iş yaptır</strong> idi değil mi? Mantığımız neydi? <em><strong>&#8220;Aynı kodları iki kere yazıyorsan bir hata var.&#8221; </strong> </em>Şimdi yukarıdaki kodları mantığımıza uyduralım.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            XXXX_ToolStripMenuItem.Visible = false; // Context Menu'ye eklediğimiz XXXX menüsünün adı bu şekilde olur.
            YYYY_ToolStripMenuItem.Visible = false; // Context Menu'ye eklediğimiz YYYY menüsünün adı bu şekilde olur.
            ZZZZ_ToolStripMenuItem.Visible = false; // Context Menu'ye eklediğimiz ZZZZ menüsünün adı bu şekilde olur.

            switch (grid.Name)
            {
                case "dataGridView1":
                    XXXX_ToolStripMenuItem.Visible = true;
                    break;
                case "dataGridView2":
                    YYYY_ToolStripMenuItem.Visible = true;
                    break;
                case "dataGridView3":
                    ZZZZ_ToolStripMenuItem.Visible = true;
                    break;
            }
        }</pre>
<p>Daha kısa değil mi? Ve minimum kod tekrarı&#8230; Her menü için 3 satır yazdık. İkincisinde 2 satır yazdık. Ben burada Switch kullandım. İf kullansaydık kodları daha da kısaltabilirdik ama ben performans açısından iyi olduğu için Switch kullanmayı tercih ettim.</p></blockquote>
<p><em>&#8220;Neden önce gizledik sonra açtık?&#8221;</em> sorularınızı duyar gibiyim. Açıklayayım. Direk Context Menu Strip üzerinden visible özelliklerini false yaparsak ya da load eventinde yazarsak ve sağ tıklama ile  visible true yaparsak; DataGridView1&#8217;e sağ tıkladığımızda XXXX_ToolStripMenuItem görünür olur. DataGridView2&#8217;ye sağ tıkladığımızda hem XXXX_ToolStripMenuItem  hemde YYYY_ToolStripMenuItem görünür olur. Yani sadece DataGridView1&#8217;de görünmesini istediğimiz özellik, DataGridView2 içinde açık kalmış olur. Çünkü sadece bir kere gizledik. Ancak her seferinde tüm menüleri gizler sadece ilgili menüyü açarsak bu sorun yaşanmaz.</p>
<p>&nbsp;</p>
<h3><strong>User Control Kullan!</strong></h3>
<p><strong>User Control Nedir? </strong>Visual Studio&#8217;da User Control adında bir obje var. Bir form gibi projeye ekliyorsunuz. Bunun en büyük özelliği ise, bir bakıma kendinize özel nesneler tasarlamanızı sağlıyor.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-862" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/C-User-Control-Kullanımı.jpg" alt="Bir Yazılım Projesine Başlamak" width="573" height="394" /></p>
<p>&nbsp;</p>
<p>Yukarıdaki görselde gördüğünüz gibi bir forma benziyor. Şimdi bir senaryoya göre inceleyelim.</p>
<p>Projemizde sürekli kullanıcı seçim, personel seçim, cari seçim, stok seçim gibi işlemler kullanıyoruz. Her seferinde forma bir label, iki textbox ve buton eklemek zorunda kalıyoruz. Butona tıkladığımızda kullanıcı, personel, cari ya da stok listesini açıyoruz. Listeden bir satıra çift tıkladığımızda satırdaki Kod ve Ad bilgisini alıp textboxlara yazıyoruz.</p>
<p>Böyle bir senaryo da (ben sürekli kullanıyorum bu senaryoyu) her seferinde aynı işlemleri yapmak zorunda kalıyoruz. Şimdi bunları bir kere yapsak ve sürekli kullansak nasıl olur? Sanki bir Class yazmışız gibi&#8230; Hatta yaptığımız bu şey ToolBox&#8217;ta dursa oradan bir textbox ekler gibi forma eklesek ve ekstra bir kod yazmak zorunda kalmasak?</p>
<p>İşte bu soruların cevabı olan şeyi anlatıyorum şu anda. <strong>User Control Kullanmak</strong>!</p>
<p>Hadi senaryomuza göre bir tasarım yapalım. Yukarıda forma eklediğimiz user control&#8217;ü düzenleyelim.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-863" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/C-User-Control-Kullanımı-2.jpg" alt="C-User-Control-Kullanımı-2" width="569" height="89" /></p>
<p>UserControl&#8217;ü tasarladık ve kodlarımızı yazmış olalım. User Controllerin Toolbox&#8217;a gelmesi için projeyi bir kere build etmemiz gerekiyor. Sonrasında toolbox&#8217;tan çekip alabileceğiz.</p>
<p>UserControl&#8217;e eklediğimiz tüm nesnelerin Public olarak ayarlanması gerekiyor. Nesneleri seçin ve Properties kısmından Modifiers özelliklerini Public yapın.</p>
<p>Şimdi toolboxtan aldığımız user control nesnemizi forma ekleyelim.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-865" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/C-User-Control-Kullanımı-3.jpg" alt="az koda çok iş yaptırmak" width="338" height="295" /></p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-864" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/C-User-Control-Kullanımı-4.jpg" alt="C-User-Control-Kullanımı-4" width="850" height="315" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/C-User-Control-Kullanımı-4.jpg 850w, https://dinamiknetwork.com/wp-content/uploads/2019/12/C-User-Control-Kullanımı-4-768x285.jpg 768w" sizes="(max-width: 850px) 100vw, 850px" /></p>
<p>UserControldeki nesnelere de</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">string kod = userControl11.txt_kulkod.Text;
string Ad = userControl11.txt_kul_adi.Text;</pre>
<p>Şeklinde ulaşabiliriz.</p>
<p>Görsellerde gördüğünz gibi. Kendimize özel bir nesne tasarladık ve formumuza eklemiş olduk.Ne kadar harika değil mi? Ne kadar güzel? O kadar kod yazmaktan kara geçtiğimizden geçtim. Bu kadar nesneyi forma ekle, adlarını değiştirme vs ile uğraşmak zorunda bile değiliz artık.</p>
<p>Her formda ekle sil vs. butonlar kullanırız. Bir user control yapalım ve bunda da sadece butonlar olsun. Ekle, Sil, Yazdır, Kapat butonlarını ekleyelim. Iconlarını verelim. Sonra forma sürükleyip bırakalım ve bütün butonlar proje genelinde aynı formatta olsun. Çok hoş olmaz mı?</p>
<p>&nbsp;</p>
<h3><strong>Bir Yazılım Projesine Başlamak &#8211; Tavsiyeler 3 &#8211; Az Koda Çok İş Yaptırmak</strong></h3>
<p>Bu yazımda anlattığım noktaları kullanmaya başladığınızda bir proje yazım hızınızın nasıl arttığına tanık olacaksınız. Sık kullanacağınız işlemleri bir class içerisine almak bazen, sıkıntılı bir sürçe olabiliyor. Ancak bir kere o sıkıntıyı çekip güzel bir class hazırladığınızda genel anlamda kazanacağınız hızı düşünün. O ana takılmayıp genele odaklanın. Üzerine birde sık kullandığınız işlemleri UserControl olarak hazırladığınızı düşünün. Forma sürükle bırak yaptınız ve kullanıcı seçme işlemi tamam. Başka bir user control çekip bıraktınız işlem butonları tamam&#8230;</p>
<p>Biliyorsunuzdur, Visual Studio&#8217;da kodları toolbox&#8217;ta saklayabiliyorsunuz.  Kod ekranında ToolBox&#8217;u açtığınızda orası kodlarınızı saklamanız için boştur. Bir kodu bloğunu seçip oraya atarsanız, kodlara bir kısa yol vermiş olursunuz. Oradan bir kod bloğuna çift tıkladığınızda kaydettiğiniz kodları tek seferde alabilirsiniz.  Bende o toolbox&#8217;daki neredeyse bütün kodlar bir kaç satırlık kodlardır ve sürekli kullandığım bütün kodlar oradadır.</p>
<p>Bazen bir formu toolbox&#8217;taki kodlara ve nesnelere çift tıklayarak hazırlıyorum. Çünkü lazım olan her şey zaten  toolbox&#8217;ta duruyor. 😉</p>
<p>&nbsp;</p>
<p>NOT: Projeleriniz her yerden ulaşabilmek için <a href="https://github.com/" target="_blank" rel="noopener noreferrer">Github</a> kullanmayı düşünebilirsiniz. Ücretini öderseniz sadece siz ve izin verdikleriniz, ücretsiz kullanmak isterseniz herkes projelerinizi görebilir ve  katkı sağlayabilir.</p>
<hr />
<p>Evet arkadaşlar<strong> Bir Yazılım Projesine Başlamak</strong>&#8211; Tavsiyeler #3  yazımda bu kadar olsun. Kod Yazım Şekli ve az koda çok iş yaptırmak hakkında konuştuk.</p>
<p>Eğer ilginizi çekebildiysem o zaman takipte kalın. Yeni bir yazının ne zaman geleceği belli değil.</p>
<p>Yazılım konusunda daha fazla içerik için <a href="https://dinamiknetwork.com/k/yazilim/" target="_blank" rel="noopener noreferrer">tıklayabilirsiniz</a>.</p>
<p>&nbsp;</p>
<hr />
<p>Bana destek olmak isterseniz <strong><a href="https://www.buymeacoffee.com/mustafabukulmez" target="_blank" rel="noopener">bir kahve ısmarlayabilirsiniz</a></strong> veya <strong><a href="https://linktr.ee/mustafabukulmez" target="_blank" rel="noopener">diğer hesaplarımdan</a></strong> takip edebilirsiniz.</p>
<p>The post <a rel="nofollow" href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-3/">Bir Yazılım Projesine Başlamak- Tavsiyeler #3</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-3/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
