<?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>Bir Yazılım Projesine Başlamak arşivleri - Dinamik Network</title>
	<atom:link href="https://dinamiknetwork.com/e/bir-yazilim-projesine-baslamak/feed/" rel="self" type="application/rss+xml" />
	<link>https://dinamiknetwork.com/e/bir-yazilim-projesine-baslamak/</link>
	<description>Bilişim Dünyasına Profesyonel Yaklaşım</description>
	<lastBuildDate>Fri, 25 Aug 2023 13:32:15 +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>Bir Yazılım Projesine Başlamak arşivleri - Dinamik Network</title>
	<link>https://dinamiknetwork.com/e/bir-yazilim-projesine-baslamak/</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>Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji</title>
		<link>https://dinamiknetwork.com/yuzuk-barkod-okuyucu-nedir-ne-isimize-yarar-giyilebilir-teknoloji/</link>
					<comments>https://dinamiknetwork.com/yuzuk-barkod-okuyucu-nedir-ne-isimize-yarar-giyilebilir-teknoloji/#comments</comments>
		
		<dc:creator><![CDATA[Mustafa Bükülmez]]></dc:creator>
		<pubDate>Tue, 24 Dec 2019 13:00:25 +0000</pubDate>
				<category><![CDATA[Donanım]]></category>
		<category><![CDATA[Bir Yazılım Projesine Başlamak]]></category>
		<category><![CDATA[Bluetooth Yüzük Barkod Okuyucular]]></category>
		<category><![CDATA[Giyilebilir Teknoloji]]></category>
		<category><![CDATA[kablolu barkod okuyucu vs kablosuz barkod okuyucu]]></category>
		<category><![CDATA[kablosuz barkod okuyucu]]></category>
		<category><![CDATA[Yüzük Barkod Okuyucu Nedir?]]></category>
		<guid isPermaLink="false">https://dinamiknetwork.com/?p=951</guid>

					<description><![CDATA[<p>Herkese Selamlar Sevgiler&#8230; Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji yazım ile sizlerleyim. Projelerimiz ile birlikte en hızlı çözümleri sunabilmek adına ilk&#46;&#46;&#46;</p>
<p>The post <a rel="nofollow" href="https://dinamiknetwork.com/yuzuk-barkod-okuyucu-nedir-ne-isimize-yarar-giyilebilir-teknoloji/">Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Herkese Selamlar Sevgiler&#8230; <strong>Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji</strong> yazım ile sizlerleyim. Projelerimiz ile birlikte en hızlı çözümleri sunabilmek adına ilk yazı serim olan <strong>Bir Yazılım Projesine Başlamak</strong> serisi ile bütünleşecek şekilde <strong>Giyilebilir Teknoloji</strong> başlığı altında yeni bir yazı serisi başlatıyorum. Bu yazı serileri birbirlerini destekleme amacı güdüyor.</p>
<p><strong><a href="https://dinamiknetwork.com/e/bir-yazilim-projesine-baslamak/" target="_blank" rel="noopener noreferrer">Bir Yazılım Projesine Başlamak</a> </strong>yazı serimdeki tüm yazılar için bağlantıya tıklayabilirsiniz.</p>
<h2><strong>Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji</strong></h2>
<p>Yazılımcılar olarak ne zaman, ne tür bir proje geliştireceğimiz belli değil. Bana her türlü proje isteği geliyor ama genelde endüstriyel çözümler hakkında istekler geliyor. Üretim takip sistemleri ise başı çekiyor. Durum böyle olunca, barkod okuyucular, barkod yazıcılar, endüstriyel tabletler ve pc&#8217;ler en temel ihtiyaçlar haline geliyor.</p>
<p>Biraz farklı olarak, bu yazı serimi, bu bahsettiğimiz temel ihtiyaçları, daha hızlı ve efektif olmak açısından, <strong>Giyilebilir Teknolojiler</strong> ve <strong>Taşınabilir Cihazlar</strong> üzerinden devam ettireceğim. İlk olarak da <strong>Giyilebilir Teknoloji </strong>ve bu cihazları projelerimiz ile nasıl efektif bir şekilde kullanabileceğimize bakacağız.</p>
<p>Piyasa ucuz ya da pahalı bir çok yüzük barkod okuyucu markası var. Bu yazımızda birkaç şirketin ürettiği <strong>Bluetooth Yüzük Barkod Okuyucuyu</strong> hakkında olacak Ek olarak;</p>
<ol>
<li><strong>Yüzük Barkod Okuyucu Nedir?</strong></li>
<li>Hangi sektörlerde mantıklı olur?</li>
<li>Getirdiği kazançlar neler?</li>
<li>Projelerimiz ile nasıl kullanabiliriz?</li>
</ol>
<p>gibi sorulara cevaplar da vermeye çalışacağım.</p>
<p>&nbsp;</p>
<h3><strong>Yüzük Barkod Okuyucu Nedir?</strong></h3>
<p><strong>Yüzük barkod okuyucu</strong> adından da anlaşılacağı üzere parmaklara takılarak kullanılan barkod okuyuculardır. Yüzük deyince tek parmağa takılan olarak algılayabilirsiniz ancak öyle değil. Genel olarak 3 parmağa takılıyor ve bir parmak ile de okuma düğmesine basılıyor. Yani 4 parmak ile kullanabiliyoruz. Bu tarz barkod okuyucular işaret, orta ve yüzük parmağına takılıyor ve baş parmak ile de okuma düğmesine basılıyor. Aşağıda örnek bir görsel görebilirsiniz.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-914" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Giyilebilir-Teknoloji-Yüzük-Barkod-Okuyucu.jpg" alt="Giyilebilir Teknoloji - Yüzük Barkod Okuyucu" width="955" height="444" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/Giyilebilir-Teknoloji-Yüzük-Barkod-Okuyucu.jpg 955w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Giyilebilir-Teknoloji-Yüzük-Barkod-Okuyucu-768x357.jpg 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Giyilebilir-Teknoloji-Yüzük-Barkod-Okuyucu-850x395.jpg 850w" sizes="(max-width: 955px) 100vw, 955px" /></p>
<p>Bu yazımdan sonra piyasadaki bir kaç ürün hakkında inceleme yazısı da yayınlayacağım.</p>
<h3><strong>H</strong><strong>angi Sektörlerde Mantıklı Olur?</strong></h3>
<p>Bu ve bunun gibi ürünler genellikle taşımacılık, depo yönetimi, marketler ve üretim yapılan tüm endüstriyel noktalarda rahatlıkla kullanılabilir. Dürüst düşünürsek, kargo şirketleri (Aras vs.), mobilya şirketleri (Bellona vs.), toptancı şirketler ve deposu olan çalışan tüm şirketler tarafından tercih edilebilir.</p>
<p>Kablolu bir barkod okuyucu ve bilgisayar olduğunu düşünelim. Üretilen ve paketlenen ürünlerin sisteme girilmesi için o bilgisayarı yanına taşınması gerekir değil mi?  Belki de sırf bu iş için bir personel işe alınması gerekir. İlk alımda fazla para ödemek, sonrasında fazladan bir personel çalıştırmaktan daha iyi değil mi? Şimdi bu sözüm için hemen vurmaya başlamayın. 😀 Yine eleman alınsın işe ama gereksiz bir iş yapmasın. Daha faydalı olabilecek işler yapsın. Sistemler geliştiren bizler için şirketin maksimum seviyede fayda görmesi bizi tercih etme sebepleridir. Yapacğaımız sistem şirkete ek yükler getiriyor ise şirket neden bizi seçsin?</p>
<p>&nbsp;</p>
<h3><strong>Getirdiği Kazançlar Neler?</strong></h3>
<p>Elimizde böyle bir barkod okuyucu var. İşlemleri daha da hızlandırmak için neler yapacağız? Bu gibi kullanılacak cihazlar, projeyi geliştirmeden önce belirlenmesi gerekir. Kablolu barkod okuyucu var ise kullanıcı bilgisayardan fazla uzaklaşamayacağını bildiğimizden ona göre bir işleyiş geliştiririz. Ancak kullanıcı okutmayı bilgisayardan uzakta da bu işlemi yapabilecekse ona göre bir işleyiş belirleriz.</p>
<p>Bu işleyiş şekli, çıkartılan barkodların üzerindeki bilgileri bile etkileyecek kadar önemli olabilir.</p>
<p>Şimdi varsayalım ki kablolu barkod okuyucu olsun&#8230; Kullanıcı üretimden çıkan ve depoya gitmesi gereken ürünleri okutarak depoya alacak.  Kullanıcı bilgisayarın hemen yanında olması gerektiğinden dolayı ürünler bir araç ile bilgisayarın yanına getirilecek, okutulacak ve yerine kaldırılacak.</p>
<p>Ya da bir kargo şirketi olsun. Her paket, barkod okuyucunun olduğu bilgisayarın yanına taşınacak ve okutulacak.</p>
<p>Şimdi varsayalım ki <strong>kablosuz barkod okuyucu</strong> olsun&#8230; Kullanıcı üretimden çıkan ve depoya gitmesi gereken ürünleri okutacak ve depoya alacak. Kullanıcının bilgisayarın yanında olmasına gerek olmadığından dolayı, taşınacak ürünleri okutup okutup bir araca yükleyecek ve direk yerine götürecek.</p>
<p>Ya da bir kargo şirketi olsun. Her paket okutularak, hangi araca yüklenmesi gerekiyorsa o aracın yanına götürüp bırakabilecek.</p>
<p>Basitçe getirdiği kazançlar olarak, zaman kazanmak, daha hızlı işlemler yapmak, personelin iş yükünü azaltıp üzerine daha çok iş yapabilmesini sağlamak gibi örnekler verebiliriz.</p>
<p>&nbsp;</p>
<h3><strong>Projelerimiz ile nasıl kullanabiliriz?</strong></h3>
<p>Yukarıdaki örnekler aklımıza ilk olarak gelebilecek, basit olarak verebileceğim birer örnekti. Biraz hayal gücümüzü kullanalım ve daha komplex bir örnek vermeye çalışayım. Bir senaryo üzerinden gidelim.</p>
<p>Projeyi geliştirdiğiniz şirket, bu gibi teknolojileri destekliyor ve MASRAF(!) olarak görmüyor. Yani 3 depo görevlisi ve 3 tane bluetooh yüzük barkod okuyucusuna sahibiz. Bu şirket toplam 3 farklı bantta, bir elektronik cihazın üretimini, parti parti yapıyor. Yani her bandın bir parti numarası var, bu parti numaraları belirli bir düzene göre sürekli değişiyor ve bu 3 depo görevlisi bu bantlardan çıkan ürünleri tek bir depoya taşıyor. Şirketin istediği şey her partinin üretimini ayrı ayrı takip etmek istiyor ve depoda sevk edilmeye hazır olan ürünleri bir ekrandan görmek istiyor.</p>
<p>Bu senaryoya göre bizim üretmemiz gereken çözüm;</p>
<ul>
<li>Kablolu barkod okuyucu var ise;
<ul>
<li>Ürünler bilgisayarın yanına taşınır. Önce ürünün paketindeki barkod üzerinde yer alan parti no okutulur sonra ürünün barkodu okutulur. Kullanıcı ekrandan kaydet butonuna tıklar ve ürün depoya alınmış olur. Son olarak ürünler depoya taşınır. Bir depocu bilgisayar başında bekler diğerleri sürekli ürün taşır.</li>
</ul>
</li>
<li><strong>Kablosuz barkod okuyucu</strong> var ise;
<ul>
<li>Her bandın sonunda bir depocu bekler. Banttan çıkan ürünlerin önce parti nosu sonra da barkodu okutulur. Biz kablosuz cihaz kullandığımızı bildiğimizden dolayı yazılımı; ilk okunan barkodun parti no, ikinci okunan barkodun ürünün barkodu olduğunu söyleriz ve okutulan her ikinci barkoddan sonra otomatik kayıt işlemini yap deriz ve ürün depoya alınmış olur. Depocunun kullandığı araç dolduğunda depoya götürür ve yerine bıraktıktan sonra geri döner ve işlemi tekrarlar.</li>
</ul>
</li>
</ul>
<p>Senaryo ve çözümleri incelediğimizde;</p>
<ul>
<li>Kablolu sistemde zaman kaybı çokken, kablosuz sistemde zaman kaybı minimumdur. (Vakit nakittir.)</li>
<li>Kablolu sistemde bir kişi daha az çalışırken, kablosuz sistemde herkes eşit çalışır. (Çok çalışanlar için adaletsizlik duygusu doğurur.)</li>
<li>Kablolu sistemde raporlama ekranında görünen bilgiler anlık değildir. Depocular ürünleri depoya ne zaman taşırsa o zaman bilgi görünür, kablosuz sistemde ürün banttan çıktığı anda okutulduğundan depodaki ürünler bilgisi anlık alınır. (Daha hızlı cevap verebilmeyi sağlar.)</li>
<li>Kablosuz sistem ile işlemler ve sonuçlar daha hızlı olacağından <em>(işten çıkarılma istemediğimiz bir durum olsa da)</em> şirketin daha az eleman çalıştırarak aynı performansı alabilmesini sağlayabilir.</li>
</ul>
<h3></h3>
<h3><strong>Bluetooth Yüzük Barkod Okuyucu İçin </strong><strong>Son Olarak&#8230;</strong></h3>
<p>Bu örneklere göz attığımızda personellerin iş yüklerinin ne kadar azalacağını ve şirket için ne kadar karlı bir durum olduğunu görebiliyorsunuz değil mi? Bir işi ilk senaryoya göre daha hızlı bitirmiş olacağından yeni bir işe geçme zamanı daha erken olacağından daha fazla iş yapmış olacak. Yani hem personel fazla yorulmadığı için, hem de patron daha fazla iş çıktığı için mutlu olacaklardır.</p>
<p>Böyle bir bakış açısı ile durum incelendiğinde, ilk başta bir miktar fazla para ödemenin aslında ne kadar karlı bir durum doğuracağı bariz bir şekilde ortaya çıkacaktır.</p>
<p>iş veren şirketler için önemli şey onlar için üretebildiğimiz çözümlerdir ve o bu çözümlerin uygulanabilirliğidir. Şirketler her zaman en hızlı ve en masrafsız yöntemi tercih etme eğilimindedirler. Eğer ilk başta biraz fazla ödeyip sonrasında elde edecekleri karı ortaya çıkarıp onay merciinide ikna edebilirseniz en mantıklı çözümü üretebildiğinizden işin sizde kalma şansı çok daha fazla olacaktır. Sizin verdiğiniz teklif diğer tekliflerden daha fazla olsa bile&#8230;.</p>
<p>Ancak siz teklifi şirkete verip bir açıklama yapmazsanız direk olarak fazla ücret çıkarıdğınızdan düşünülmeden red alma olasılığınız çok yüksektir. Fiyatınız yüksek olabilir ama mantıklı açıklamalar ile onay merciini ikna etmek sizin elinizde&#8230;</p>
<blockquote><p><em>BİLGİ: Her ne kadar mantıklı çözümler üretseniz bile bazen şirketler göz göre göre düşünmeden gidip en düşük fiyatı seçeceklerdir. Onlar için fazla uğraşmayın. Ne yapsanız da ikna edemeyeceksiniz. Bu gibi şirketler en az iki kere boş yere paralar dökecekler, rezil olacaklar ve dilleri yanacak. O zaman onlar sizi bulacaklar.</em></p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<hr />
<p><strong>Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji</strong> yazımda bu kadar arkadaşlar.</p>
<p>Yaptığımız tüm donamım  yazıları için <a href="https://dinamiknetwork.com/k/donanim/">buraya </a>tıklayabilirsiniz.</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/yuzuk-barkod-okuyucu-nedir-ne-isimize-yarar-giyilebilir-teknoloji/">Yüzük Barkod Okuyucu Nedir? Ne İşimize Yarar? &#8211; Giyilebilir Teknoloji</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dinamiknetwork.com/yuzuk-barkod-okuyucu-nedir-ne-isimize-yarar-giyilebilir-teknoloji/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Bir Yazılım Projesine Başlamak- Tavsiyeler #4</title>
		<link>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-4/</link>
					<comments>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-4/#comments</comments>
		
		<dc:creator><![CDATA[Mustafa Bükülmez]]></dc:creator>
		<pubDate>Fri, 20 Dec 2019 06:00:22 +0000</pubDate>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Bir Yazılım Projesine Başlamak]]></category>
		<category><![CDATA[C# User Control Nedir]]></category>
		<category><![CDATA[Code ToolBox]]></category>
		<category><![CDATA[Hızlı Kod Yazmak]]></category>
		<category><![CDATA[intelligence]]></category>
		<category><![CDATA[User Control]]></category>
		<category><![CDATA[Visual Studio Snippet Nedir?]]></category>
		<category><![CDATA[visual studio Snippets]]></category>
		<guid isPermaLink="false">https://dinamiknetwork.com/?p=896</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 4. 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-4/">Bir Yazılım Projesine Başlamak- Tavsiyeler #4</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 4. 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-3/" target="_blank" rel="noopener noreferrer"><strong> Bir Yazılım Projesine Başlamak</strong>&#8211; Tavsiyeler #3</a>, <strong>kod yazım şekilleri</strong> ve <strong>az koda çok iş yaptırmak</strong> hakkında da konuşmuştuk. Bu yazının sohbet konusu ise <strong>Hızlı Kod Yazmak</strong>  üzerine olacak. Bu yazım önceki yazılarım ile bağlantılı olacak ve onlardan bir çok referans içerecek. Aslında önceki 3 yazım bu yazım için hazırlanmış oluyor.</p>
<p>&nbsp;</p>
<h2><strong>Bir Yazılım Projesine Başlamak- Tavsiyeler #4</strong></h2>
<h3><strong>Hızlı Kod Yazmak</strong></h3>
<p>Geldik işin zirvesi diyebileceğimiz yere. Bu yazım önceki yazıların kapsayıcısı olacak. Yani önceki 3 yazı olmadan bu yazı olmazdı.</p>
<p>Öncelikle kodlama mantığını öğrendik. Düzenli ve doğru bir kodlama mantığı ile güzel bir çözüm ürettik. Yazılımcılar olarak tabi bu kodlama mantığının canlı ortamda yürütebilecek şekilde programlanması gerekiyor. Zaten bizim için asıl olay bu. Öyle kodlar yazmalıyız ki projeyi kullanacak şirketteki çalışanlar, şirketlerine uygun kodlama mantığını projemizde uygulayabilsinler. Tamam biz mantığı öğrendik, tavsiye ettik ve kullanıldı ama yazdığımız program bu kodlama mantığını yürütebilecek mi?</p>
<p>Buradaki önceliğimiz öğrendiğimiz bu kodlama mantığını yürütebilecek yöntemleri yazmaktır / yazabilmektir. Öğrendiğimiz kodlama mantığını, öğrenmemiş olsaydık elbette gerekli yöntemleri yazamazdık.</p>
<p>Bu kodlama mantığını kolayca yazabilmemiz için gereken ilk şartı yerine getirdik. İkinci şart ise elbette Basit Düşünmek ve Çevresel Etkenleri Belirleyebilmektir. Bir yöntem yazmak zorundayız ama bunu ne kadar kompleks hale getirirsek o kadar zorlanacağız ve o kadar sıkıntı yaşayacağız. Çevresel Etkenlerden kastımızın da müşterilerimiz olduğunu zaten ikinci yazımdan biliyorsunuz. Bir mantık her şirket için geçerli olamaz. Elbette işin içinde keyfi durumlarda var.</p>
<p>Biz gruplama ayracını sadece nokta ( . ) olacak diye düşünebiliriz ama müşteri nokta ( . ) kullanmak istemeyebilir. <strong>&#8220;Arkadaşım bırak da onu biz seçelim.&#8221;</strong> deme ihtimalleri var.  Çevresel etkenleri denkleme ekledikten sonra olabildiğince basit düşünerek sonuca ulaşabiliriz. Burada kodlamalardaki ayraçları bile belirli tercihler içinden yapabilecekleri bir şekilde programlamak gerekecek.</p>
<p>Buraya kadar geldik. Her şeyimiz hazır. İş program kodlarını yazmaya geldiğinde üçüncü yazımı hatırlayalım. Az koda çok iş yapırmak&#8230; Öyle kodlar yazmalıyız ki hem olabildiğince kısa olsun hem de her türlü kodlama mantığını destekleyebilsin. Eh işte burası da sizin hayal gücünüze kalıyor.</p>
<p>İlk yazımız kodlama mantığı üzerine olduğu için senaryomuzda kodlama mantığı üzerinden ilerledi. Kodlama mantığını zaten çözdüğümüzü düşünelim ve diğer konulara geçelim artık.</p>
<h3></h3>
<p>&nbsp;</p>
<h3><strong>Tüm İmkanları Kullan!</strong></h3>
<p>Ben Visual Studio kullandığımdan dolayı anlatımlarım da onun üzerinden olacak. Visual Studio basit bir IDE değil. Bir çok özelliği var.</p>
<p>&nbsp;</p>
<h4><strong>User Control / Kullanıcı Denetimi (Nesnesi) Kullan!</strong></h4>
<p>Mesela üçüncü yazımda bahsettiğim <strong>User Control</strong> konusu&#8230; Gerçi başka IDE&#8217;lerde böyle bir şey var mı net olarak bilmiyorum ama tahmin ediyorum ki yok.  <strong>User Control</strong> konusu <strong>Hızlı Kod Yazmak</strong> için en önemli şeylerden birisidir. <strong>User Control</strong> &#8216;ü aktif şekilde kullanıyorsunuz varsayalım ve diğer konuya geçelim.</p>
<p><strong>User Control</strong> &#8216;leri sevin. Onu kullanın. O sizin en büyük yardımcılarınızdan birisidir.</p>
<p>&nbsp;</p>
<h4><strong>Code ToolBox / Kod Araç Kutusu (Kısayolu)  Kullan!</strong></h4>
<p>Yine üçüncü yazımda bundan bahsetmiştim. Kodları seçip toolbox&#8217;a atabiliyorsunuz. Kullanmak istediğinize ise çift tıklıyorsunuz yada sürükleyip istediğiniz yere bırakıyorsunuz. Tıpkı form nesnesi ekler gibi&#8230;</p>
<p>Düşünün&#8230;. Bir GridView nesnesini doldurmak, kolonlara biçimlendirme vermek, bazı kolonları gizleyip göstermek için kodlar yazdınız. Her seferinde bu kodları <em>&#8220;Daha önce nerde kullanmıştım yaaa?&#8221;</em> şeklinde form form gezerek aramak mı kolay yoksa toolbox&#8217;tan sürükleyip bırakmak mı?</p>
<p>Direk kendimden örnek vereyimm. Benim toolbox&#8217;umda 5 tane GridView güncelleme metodu var. Ben genelde forma aldığım nesnelerin hepsini mutlaka isimlendiririm ama girdview, groupbox gibi nesneleri isimlendirmiyorum. Bu yüzden toolbox&#8217;uma aldığım GridView güncelleme metodları birebir aynı, tek fark nesne isimleri. Bunlara Toolbox&#8217;ta verdiğim isimler (rename yapabiliyorsunuz) ve metodların isimleri GridUpdate1, GridUpdate2, GridUpdate3, GridUpdate4, GridUpdate5 şeklinde. Her metod 55 satır koddan oluşuyor ve  yaklaşık 45 kere nesne adı geçiyor. Neden sadece bir metod yapıp forma eklediğim ikinci grid için, GridUpdate1 metodunaki GridView1&#8217;leri GridView2 yapmak için uğraşıp zaman kaybedeyim. CTRL+H (bul ve değiştir) yapabilirim ama yine de zaman kaybı&#8230;</p>
<p>Şimdi burada <em>&#8220;Amma da büyüttün. Ne olacak sanki?&#8221;</em> diye düşünebilirsiniz. Bu normal. Çünkü bende en başta her seferinde uğraşıyordum. Neredeyse her formumda bir grid olduğunu düşünürsek her seferinde uğraşmak çok sinir bozucu oluyor. Hatta olursa bir forma 6 tane grid eklemem gerekirse toolbox&#8217;a GridUpdate6 metodu da eklenir. 😉 😀</p>
<ul>
<li>GridUpdate1 metodunun içindeki kodlar GridView1* nesnesini doldurup biçimlendiriyor.</li>
<li>GridUpdate2 metodunun içindeki kodlar GridView2* nesnesini doldurup biçimlendiriyor.</li>
<li>GridUpdate3 metodunun içindeki kodlar GridView3* nesnesini doldurup biçimlendiriyor.</li>
<li>GridUpdate4 metodunun içindeki kodlar GridView4* nesnesini doldurup biçimlendiriyor.</li>
<li>GridUpdate5 metodunun içindeki kodlar GridView5* nesnesini doldurup biçimlendiriyor.</li>
</ul>
<blockquote><p><strong>Bilgi</strong>: Ben projelerime DevExpress kullanıyorum. GridView nesnesi de DevExpress&#8217;e ait bir nesnedir. Her yazılımcının mutlaka incelemesini öneriririm.</p></blockquote>
<p>Kodlar için ayrılan toolbox&#8217;u kullanın. Onu sevin. O sizin en büyük yardımcılarınızdan birisidir.</p>
<p>&nbsp;</p>
<h4><strong>Snippets / Kod Parçacıklarını Kullan!</strong></h4>
<p><strong>Snippets nedir</strong> önce ona bakalım.</p>
<h5><strong>Visual Studio Snippet Nedir?</strong></h5>
<p>Kısaca, kısayol tuşlarının birleşimini kullanarak bir kod dosyasına eklenebilen yeniden kullanılabilir kod blokları diyebiliriz. Yani biraz farklı bir şekilde, ToolBox&#8217;a eklediğimiz kodlar gibi&#8230; Ancak bunları bir kısayol tuşuna bağlayabiliyoruz. Varsayılan olarak bir çok <strong>Snippets</strong> var.</p>
<p>Örnek</p>
<p><strong>Visual Studio</strong> &#8216;da bir kod sayfasında <strong>for</strong> yazıp <strong>TAB+TAB</strong> yaptığınızda For döngüsünü oluşturan kodları otomatik tamamlar. Aşağıdaki gibi.</p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">// for yazdınız ve TAB + TAB yaptınız....
// geri kalan kısmını otomatik oluşturdu...


for (int i = 0; i &lt; length; i++)
{

}</pre>
<p>Yada foreach yazdınız <strong>TAB+TAB </strong>yaptınız. Aşağıdaki gibi otomatik getirdi. <em>(Aslında foreach yazmamıza bile gerek yok. Aşağıdaki görsele bakın.)</em></p>
<pre class="prettyprint lang-csharp" data-start-line="1" data-visibility="visible" data-highlight="" data-caption="">    foreach (var item in collection)
            {

            }</pre>
<p>Aşağıdaki görsele dikkat edin.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-899" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-.png" alt="Bir Yazılım Projesine Başlamak" width="849" height="274" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-.png 849w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak--768x248.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>for yazdım ve <strong>intelligence</strong> bana zaten gösteriyor.</p>
<p><em>Malesef VS güncelleme yaptıktan sonra Türkçe oldu ve yoğunluğumdan düzeltme şansım olmadı. Ama aslında net olarak anlayabilmemiz için yani sadece bu görseli Türkçe olarak alabilmiş olmam tek güzel şey oldu. 😀  (sekme dediği TAB tuşu 😀 )</em></p>
<p>Mavi olarak seçili satırın en solundaki simgeye dikkat edin. O simge bir <strong>Snippets</strong> olduğunun göstergesidir.</p>
<p>Şimdi düşünürsek neden elle bir for döngüsü kodu yazmaya çalışayım? Neden bununla vakit kaybedeyim ki? Kaldı ki <strong>Visual Studio</strong> bana, bunun gibi kendime özel <strong>snippets</strong> uygulayabilme şansı da vermişken neden kullanmayayım?</p>
<p>Visual Studio&#8217;da bir dile ait tüm <strong>Snippet</strong> &#8216;leri görüntülemek için; <strong>Tools (Araçlar) &gt; Snippet Manager (Kod Parçacıkları Yöneticisi)  yada CTRL + K +B (Önce K sonra B)</strong> yapabilirsiniz.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-900" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-2-1.jpg" alt="Bir Yazılım Projesine Başlamak" width="619" height="475" /></p>
<p><strong>Snippets</strong> &#8216;e (Kod Parçacıklarına) aşağıdaki yollardan erişebilirsiniz.</p>
<ul>
<li><span class="sxs-lookup"><span data-stu-id="69521-111">Menüden, <strong>Edit</strong> &gt; <strong>IntelliSense</strong> &gt; <strong>Insert Snippet</strong></span></span></li>
<li><span class="sxs-lookup"><span data-stu-id="69521-112">Kod sayfasın da sağ tık yapıp, <strong>Snippet</strong> &gt; <strong>Insert Snippet</strong></span></span></li>
<li><span class="sxs-lookup"><span data-stu-id="69521-113"><strong>Ctrl</strong>+<strong>K</strong>,<strong>Ctrl</strong>+<strong>X </strong>Kısayol tuşlarını kullanarak</span></span></li>
</ul>
<p><a href="https://docs.microsoft.com/tr-tr/visualstudio/ide/code-snippets?view=vs-2019" target="_blank" rel="noopener noreferrer">Buradan</a> daha fazla bilgi alabilirsiniz.</p>
<p>Var olanları düzenleyebilir, kendinize özel olarak ekleyebilirsiniz.</p>
<p><strong>Snippets</strong> &#8216;leri sevin. Onu kullanın. O sizin en büyük yardımcılarınızdan birisidir.</p>
<p>&nbsp;</p>
<h3><strong>Bir Yazılım Projesine Başlamak &#8211; Hızlı Kod Yazmak için Sonuç Olarak</strong></h3>
<p>Bir Yazılım Projesine Başlamak başlığı altında, çevresel etkenleri denkleme dahil ettik. Olabilecek varyasyonları ve gelecekte sorun olabilecek neredeyse her şeyi kullanıcılardan aldık. Olabildiğince basit düşünerek kağıt üzerine projenin taslağını hazırladık. Neyi nasıl yapacağımızı belirledik. Sonrasında kod yazım şekillerine değindik ve az koda nasıl çok iş hatta daha çok iş yaptırabiliriz gördük&#8230;</p>
<blockquote><p><em>Paldır küldür başladığınız bir projenizi düşünün&#8230; Bu bilgileri aldıktan sonra, o projenizi tekrar yazsaydınız tahminen ne kadar sürede yazardınız? Tahminen zamandan ne kadar kar ederdiniz? Tahminen ne kadar daha az sorun yaşardınız?&#8230; </em></p></blockquote>
<p>Bitti mi? Hayır&#8230; Daha bitmedi. Daha seriye eklenecek en az iki yazı daha var. Buraya kadar olanlar bizim için olmazsa olmaz şeylerdi. Her yazılımcının mutlaka bilmesi gerek diye düşündüğüm şeylerdi.</p>
<p>Bu yazıdan sonra proje içi kullanıcı yetkilendirme konusunda bakacağız ki bu konu her proje için geçerli olmuyor. Bazı projeler küçük çaplıdır ve basit bir mantık iş görür. Belkide yetkilendirme yapmanıza bile gerek yoktur. Daha kapsamlı projeler için de olmazsa olmazdır. Ama bu konu  önceki yazılar ile çok bağdaşık sayılmaz.</p>
<p>Son konumuz da öyle. Aslında yazı serisinden biraz bağımsız bir konu ama yine de her yazılımcının bilmesi gereken bir konu diye düşünüyorum. Sonuçta en basitinden C# bir derya deniz&#8230; Hiçbir Allah&#8217;ın kulu ben C# &#8216;ta uzmanım diyemez. Diyenlere itimat etmeyin.</p>
<blockquote><p><em>Ben C#&#8217;ta uzmanım = Ben  pasifik okyanusunun her metresinde yüzdüm, yüzebiliyorum. </em></p></blockquote>
<p>Mecazen değil. Direk olarak böyle bir şey&#8230;</p>
<p>&nbsp;</p>
<hr />
<p>Evet arkadaşlar<strong> Bir Yazılım Projesine Başlamak </strong>&#8211; Tavsiyeler #4  yazımda bu kadar olsun. Hızlı kod yazmak 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-4/">Bir Yazılım Projesine Başlamak- Tavsiyeler #4</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-4/feed/</wfw:commentRss>
			<slash:comments>2</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>
		<item>
		<title>Bir Yazılım Projesine Başlamak- Tavsiyeler #2</title>
		<link>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-2/</link>
					<comments>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-2/#comments</comments>
		
		<dc:creator><![CDATA[Mustafa Bükülmez]]></dc:creator>
		<pubDate>Wed, 11 Dec 2019 09:35:57 +0000</pubDate>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[algoritma hazırlamak]]></category>
		<category><![CDATA[Basit Düşünmek]]></category>
		<category><![CDATA[Bir Yazılım Projesine Başlamak]]></category>
		<category><![CDATA[Kullanıcı Hatası Mı? Yazılımcı Hatası Mı?]]></category>
		<category><![CDATA[proje geliştirmede çevresel etkenler]]></category>
		<guid isPermaLink="false">https://dinamiknetwork.com/?p=744</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 2. 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-2/">Bir Yazılım Projesine Başlamak- Tavsiyeler #2</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 2. 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>Bu yazı serisinin ilk yazısı olan<strong> </strong><a href="https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-1/" target="_blank" rel="noopener noreferrer"><strong>Bir Yazılım Projesine Başlamak-</strong> Tavsiyeler #1</a> yazımda <strong>Kodlama Mantığı</strong> hakkında konuşmuştuk. Bu yazımda da<strong> Basit Düşünmek</strong> hakkında konuşacağız. Elbette sadece<strong> Basit düşünmek</strong> üzerine değil<strong> proje geliştirmede çevresel etkenler</strong>e de değineceğim. İşi veren patronlar/müdürler, programı kullanacak olan kullanıcılar vs. Önceki yazımda bahsettiğim gibi bu yazı serisinde anlatılan her şey kendi deneyimlerimden oluşan bilgi birikimidir.</p>
<p>Bir proje geliştirirken bir çok kez takıldığımız noktalar oluyor. Hemen basit düşünüp işi bilen kişiye sormak yerine kendimiz çözüm üretmeye çalışıyoruz. Çözümü bulabilmek için belki de günlerce kafa patlatıyoruz. Ancak bulduğumuz çözüm;</p>
<ol>
<li>Gerçekte ne kadar uygulanabilir?</li>
<li>Gerçeğe ne kadar uyarlanabilir?</li>
<li>Bize getirdiği yük nedir?</li>
<li>Kullanıcıya getirdiği yük nedir?</li>
<li>Gerçekten mantıklı mı?</li>
</ol>
<p>Bunlar gibi bir çok soru basit düşünmediğimiz için bizi zora sokan şeyler arasında. İlk etapta bu sorular mantıksız gelebilir. <em><strong>Basit Düşünmek</strong> ile ne alakası var?</em> diye düşünebilirsiniz. Bu yazımda da işte bu sorulara cevap vermeye çalışacağım. Gerçek anlamda, <strong>basit düşünmeye</strong> başladığımızda elde edeceğimiz hız ve iç tatmin çok memnun edici olacaktır.</p>
<p>Basit düşünmek, az düşünmek olarak algılanmamalı. Aslında çok fazla düşünmek anlamına geliyor. O kadar soru sormalı ve o kadar çok düşünmeliyiz ki <strong>&#8220;kullanımı çok basit&#8221;</strong> olabilsin. 😉</p>
<p>&nbsp;</p>
<h2><strong>Bir Yazılım Projesine Başlamak- Tavsiyeler #2</strong></h2>
<h3>Basit Düşünmek</h3>
<p>İlk olarak hali hazırda var olan bir proje üzerinden konuşalım.</p>
<p>Öncelikle karşılaştığımız sorunun ne olduğunu net bir şekilde anlamalıyız. Bazen sorunun ne olduğunu anlamadan sorunu çözebiliyoruz. Ancak bu kırılan ve su sızdıran baraj duvarını bantlamak gibi&#8230; Su kaçırmasını engelliyoruz belki ama başka sorunlara yol açıyor. Kaçan suya odaklandığımız sürece asla kalıcı bir çözüm elde edemeyeceğiz. İlk amacımız barajın neden kırıldığı olmalı değil mi?</p>
<p>Genelde bir sorun ile karşı karşıya kaldığımızda ister istemez panikliyoruz ve ilk olarak, örneğimizdeki gibi, sızan suyu durdurmaya çalışıyoruz. Hemen kafamızda kompleks bir senaryo oluşur ve tüm odağımız sızan suya düşer. Barajın neden kırıldığını düşünmek daha sonra aklımıza gelir. Bu aklımıza geldiğinde de çoktan bir sürü tampon önlem almış yani yanlış şeyler yapmış olabiliriz.</p>
<p>Üstelik ne kadar geç fark edersek o kadar fazla tampon önem almış oluruz. Belkide geriye dönmek için çok geç kalmışızdır&#8230; Basit düşünmenin ilk şartı barajın neden çatladığı olmalı. Bu çatlağa sebep olan şey ne? Kullanıcının hatası mı? Yoksa bizim gözden kaçırdığımız bir şey mi?</p>
<p>O halde ilk kuralımızı bir soru olarak verelim&#8230;</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone wp-image-758" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/algoritma-hazırlamak.jpg" alt="algoritma hazırlamak" width="1000" height="738" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/algoritma-hazırlamak.jpg 1499w, https://dinamiknetwork.com/wp-content/uploads/2019/12/algoritma-hazırlamak-768x567.jpg 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/algoritma-hazırlamak-850x627.jpg 850w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<h4><strong>Kural 1 &#8211; Kullanıcı Hatası Mı? Yazılımcı Hatası Mı?</strong></h4>
<p>Şimdi bu kadar şey söyledik. Bir senaryo ile de destekleyelim.</p>
<p>Bir kullanıcı girişi ekranı yaptınız. Kullanıcılar bu ekrandan sürekli veri girişleri yapıyor. Ancak bu ekran için sürekli hata bildirimi alıyorsunuz. Gelen hataya bakarak hızlıca çözmek için önemler aldınız ama yine de hatalar devam ediyor. Siz test ediyorsunuz hiçbir sorun çıkmıyor ama kullanıcı <em>&#8220;hata var&#8221;</em> diyor.</p>
<p>En son dayanamıyorsunuz ve kullanıcının yanına gidiyorsunuz ve <em>&#8220;Aynı işlem tekrar yapar mısın?&#8221;</em> diyorsunuz. Kullanıcı işlemi tekrar yapmaya başlıyor ki daha yeni başlamışken bir bakıyorsunuz ki; (olası şeyler)</p>
<ol>
<li><em>Yanlış veri giriyor.</em></li>
<li><em>Arada bir işlemi atlıyor.</em></li>
<li><em>Tarif ettiğiniz şekilde değil, kendine kolay gelecek şekilde yapıyor.</em></li>
<li><em>Veri girmesi gereken bir alanı boş bırakıyor.</em></li>
<li><em>Verdirdiğiniz uyarıları okumadan geçiyor.</em></li>
<li>&#8230;</li>
</ol>
<p>Anlıyorsunuz ki kullanıcı, sizin hiç düşünmediğiniz şekilde kullanıyor programı. Siz kaydetme esnasında çıkan hatalara odaklandınız. Kayıt esnasında çıkan hata sizi paniğe sürükledi. Bir an önce o hatayı çözmeye odaklandınız. Ancak kullanıcının yanlış veri girebileceğini düşünmediniz.</p>
<p>Aslında sorun bu kadar basitti. Buna sebep olan şey ise şu. Programı siz yazdığınız için nereye nasıl bir veri girilmesi gerektiğini biliyorsunuz ve ona göre test ediyorsunuz. Ancak kullanıcının yanlış veri girebileceğini, veri girmesi gereken yeri boş geçeceğini ya da verdirdiğiniz uyarıları okumadan geçebileceğini hesaba katmadınız. Buradaki hata sizde mi? Yoksa kullanıcıda mı?</p>
<p>O halde ikinci kuralımızı verelim mi?</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-747" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-basit-düşünmek.jpg" alt="Bir Yazılım Projesine Başlamak basit düşünmek" width="750" height="375" /></p>
<h4><strong>Kural 2 &#8211; Bir Kullanıcı Kadar Basit Düşün!</strong></h4>
<p>Siz bir yazılımcısınız ancak programı kullanacak olan kişiler öyle değil. Onlar için sadece işlerinin çözülüp çözülmediği, işlemlerini hızlı ve basitçe yapabilip yapamadığı ile ilgileniyor. Siz o kadar kafa patlattınız, belkide günlerinizi planlar, algoritmalar yaparak geçirdiniz&#8230; Ama yine de bir çok kez aynı yere dönmek zorunda kaldınız.</p>
<p>Tasarladığınız şeyi kullanacak kişileri düşünerek tasarlayın. Olabildiğince basit olması gerekiyor. Olabildiğince basit düşünmeniz gerekiyor. Ekranların kullanımı ne kadar kompleks ise o ekranlardan o kadar çok hata alacaksınız. <strong>Basit düşünün.</strong> Olabildiğince basit ve sade. Kullanımı kolay ve işlevsel olmalı. Bu hem sizin iş yükünüzü azaltacak hemde kullanıcı dostu olacak. Sadece bu noktada çifte kazanç elde edeceksiniz.</p>
<p>İnsanlar yeteneklerini göstermek ister. Olabildiğince cafcaflı olsun görenler <em>&#8220;Vaaay&#8221;</em> desin ister. İlk zamanlar bende öyleydim. Yaptığım ekranlar, şimdiki kafama göre karman çorman olur ama göze de güzel görünürdü. Ancak ne zaman böyle bir ekran tasarımı yaptıysam tekrar tekrar geri dönerek sadeleştirmek zorunda kaldım. Tabi son haline gelene kadar ki zaman kaybı ve stres ise cabası oldu.</p>
<p>Böylesi bir sorun ile karşılaşmamak için yine<strong> basit düşünüp inceyi görüp</strong> direk olarak projeyi kullanacak olan kullanıcılar ile görüşün. Projeye başlamadan önce topladığınız bilgileri, püf noktaları  ve tüyoları kullanarak önce bir<strong> plan yapmak</strong> ve ardından <strong>algoritma hazırlamak</strong> fayda sağlayacaktır. Olabildiğince basit düşünerek işlemleri ele almalı ve bir yol çizmelisiniz ve bu çizdiğiniz yolu projeye başlamadan önce işi veren kişiye onaylatmalısınız.</p>
<p>Üçüncü kuralımız ile devam edelim.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-757" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/proje-geliştirmede-çevresel-etkenler.jpg" alt="proje geliştirmede çevresel etkenler" width="960" height="640" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/proje-geliştirmede-çevresel-etkenler.jpg 960w, https://dinamiknetwork.com/wp-content/uploads/2019/12/proje-geliştirmede-çevresel-etkenler-768x512.jpg 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/proje-geliştirmede-çevresel-etkenler-850x567.jpg 850w" sizes="(max-width: 960px) 100vw, 960px" /></p>
<h4><strong>Kural 3 &#8211; Yazılımcı Sensin Onlar Değil</strong></h4>
<p>Size işi veren kişi / müşteri sizden en güzel programı isteyecektir. Onlara takılmayın. Projeyi nasıl geliştirmeniz gerektiğine, nasıl yazmanız gerektiğine karışmasına izin vermeyin. Yazılımcı sizsiniz, onlar değil. Onlar sadece anlatsın siz yazın.</p>
<p>Öncelikle işi veren kişiden isteklerini topladıktan sonra bu programı kullanacak olan kişiler ile görüşün. Patron/ Müdür her şeyi biliyor gibi davranabilir ama öyle değildir. Tek bir kişiye göre ilerlerseniz her zaman sorun yaşarsınız.</p>
<p><em>&#8220;Sen benim dediğim gibi yap! Kullanmasınlar da göreyim onları!&#8221;</em> Gibi bir cümle ile karşılaşmanız %90. Ama gerçekte işler öyle olmuyor işte&#8230; O patron/müdür kullanmayan herkesi işten çıkarak değil ya? Yaparım dese bile bu mümkün değil! Yapamaz! Sonuç, yine başa dönüp, kullanıcılar ile görüşüp, onlara da uyacak şekilde tekrar düzenleme yapmak olacak.</p>
<blockquote><p><strong>NOT</strong>: Son kısımda bahsettiğim şeyler sadece yazılımcılar için geçerli değildir. Bir bilişim alt yapısı kurulumu yapılacak ise de geçerlidir. İşi size veren kişinin hangi marka switchi hangi marka kabloyu, kabloları nereden geçireceğinize karışmasına izin vermeyin. Örneğin bu yer bir fabrika ise oradan bir elektrik bölümü vardır. Kabloların nereden geçmesi gerektiğini patron ile değil bu elektrikçiler ile görüşmelisiniz. Bu görüşmeler sonucunda da en mantıklı olanı yapmalısınız.</p></blockquote>
<p>&nbsp;</p>
<h4>Sonuç Olarak&#8230;</h4>
<p>Bu noktaya kadar yukarıda sorduğumuz sorulara cevap vermiş olduk sanırım.  Buraya kadar okuduğunuz halde kafanız karışmış olabilir. Bu yüzden maddeler halinde özetleyelim.</p>
<ol>
<li>Programı yazmaya başlamadan önce mutlaka, programı kullanacak olan kullanıcılarla da görüş.</li>
<li>Olabildiğince tüyo ve püf nokta topla.</li>
<li>Programı yazarken bir kullanıcı gibi düşün. Basit ve kullanışlı olmalı. Gerekirse yazım aşamasında kullanıcılara göster.</li>
<li>Programı yazarken işlemleri olabildiğince basit şekilde yazmaya çalış.</li>
<li>Hemen bitiş noktasına varmak için çabalama, vakit harca, kafa patlat ve bir kere yaz. Bir daha geri dönmek zorunda kalma.</li>
<li>Aşama aşama kullanıcılardan onay al. Kullanıcılar ile birlikte ilerle. Olabildiğince tüyo al.
<ol>
<li>Çünkü her zaman &#8220;Aaah biz bunu söylemeyi unutmuşuz.&#8221; cümlesini duyabilirsiniz.</li>
</ol>
</li>
<li>Bir kullanıcı gibi test et. Olabildiğince yanlış veriler girerek, alanları boş geçerek testlerini yap.
<ol>
<li>Hatta direk kullanıcılara test ettir. Sen ne kadar kullanıcı gibi düşündüğünü düşünsende onlar programı kıracak bir yolu hep bulur&#8230;</li>
</ol>
</li>
</ol>
<p>&nbsp;</p>
<hr />
<p>Evet arkadaşlar<strong> Bir Yazılım Projesine Başlamak</strong>&#8211; Tavsiyeler #2  yazımda bu kadar olsun.<strong> Proje geliştirmede çevresel etkenleri</strong> de denkleme sokarak olabildiğince basit düşünüp temiz bir iş çıkarmak 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-2/">Bir Yazılım Projesine Başlamak- Tavsiyeler #2</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-2/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Bir Yazılım Projesine Başlamak- Tavsiyeler #1</title>
		<link>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-1/</link>
					<comments>https://dinamiknetwork.com/bir-yazilim-projesine-baslamak-tavsiyeler-1/#comments</comments>
		
		<dc:creator><![CDATA[Mustafa Bükülmez]]></dc:creator>
		<pubDate>Fri, 06 Dec 2019 06:35:49 +0000</pubDate>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Bir Yazılım Projesine Başlamak]]></category>
		<category><![CDATA[Hiyerarşik Yapı Kullanmaya Müsaittir]]></category>
		<category><![CDATA[KOD Mantığı Kullanmak]]></category>
		<category><![CDATA[Kod Mantığı Kullanmanın Amacı Nedir?]]></category>
		<category><![CDATA[Veritabanı için performans]]></category>
		<category><![CDATA[yazılım projesi hazırlamak]]></category>
		<category><![CDATA[yazılım projesi hazırlamak - dikkat edilmesi gerekenler]]></category>
		<category><![CDATA[Yeni projeye başlarken dikkat edilmesi gerekenler]]></category>
		<guid isPermaLink="false">https://dinamiknetwork.com/?p=594</guid>

					<description><![CDATA[<p>Merhabalar. Bu yazımda işin bir alaylısı olarak tecrübelerimden derlediğim bir yazılım projesine başlamak &#8211; dikkat edilmesi gerekenler  konusuna değinmek istedim.  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-1/">Bir Yazılım Projesine Başlamak- Tavsiyeler #1</a> appeared first on <a rel="nofollow" href="https://dinamiknetwork.com">Dinamik Network</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Merhabalar. Bu yazımda işin bir alaylısı olarak tecrübelerimden derlediğim <strong>bir yazılım projesine başlamak &#8211; dikkat edilmesi gerekenler </strong> konusuna değinmek istedim.  Bu yazıda göreceğiniz şeylerin her 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>Gerek üniversite zamanlarında işi öğrenmek için yazdığım projelerden, bir zamanlar var olan kendi şirketimde geliştirdiğim projelerden ve iş hayatında geliştirdiğim ya da destek verdiğim projelerin tamamında geçerli olan püf noktaları vereceğim. Geliştirdiğim ve katkı sağladığım her projede <em>&#8220;keşke bunu önceki projelerimde de kullansaydım.&#8221;</em> dediğim noktalar. Bazı projelerim için bu o anda öğrendiğim ya da keşfettiğim şeyleri eklemek kolay olsada bazıları için imkansızdı. Çünkü proje hali hazırda bayağı ilerlemişti.</p>
<p>Bu tarz keşkeler zaten kaçınılmazdır. Aslında bu keşkeler gelişmekte ve öğrenmeye devam edebildiğimizin göstergesi değil midir?</p>
<p>Bir sorunu çözebilmek, bir tıkanıklığı açabilmek için kafa patlatıp güzel bir çözüm bulduğumuzda, önceki projelerimizde takılı kaldığımız noktaları da, bulduğumuz bu çözüm ile aşabileceğimizi fark ediyoruz değil mi? <em>&#8220;Keşke o zamanda bu çözüm aklıma gelseydi&#8221;</em> deriz içimizden. Bilmeliyiz ki bu cümleyi kurabiliyor isek bir adım daha ileri gidebilmişizdir. Bulduğumuz o çözümü zaten bulduğumuz anda bulmuş olmamız gerekiyordu. İşin içinde pişmek de aslında böyle bir şey.</p>
<p><strong>Bir yazılım projesine başlamak</strong> her zaman çok hoş oluyor değil mi? Yeni aldığınız bir kitabın kapağını ilk kez açtığınızda burnunuza gelen o hoş kokunun verdiği his ile aynı. Hatta böyle eski projeleriniz içinde kaybolduğunuz, bug ayıklamak ya da hataları çözme ile geçen bir sürenin ardından yeni ve temiz <strong>bir yazılım projesine başlamak</strong> çok güzel bir his. Tabi ilerledikçe yine sarpa sarmalar başlayacak. Şurasını nasıl çözeceğim? Burada bunu yapsak nasıl olur? sorunsalları baş gösterecek&#8230; Aslında bu yazı serime bu sorunsalları biraz azaltma amacı da güdüyor.</p>
<h2></h2>
<h2><strong>Bir Yazılım Projesine Başlamak</strong></h2>
<p>Giriş kısmı biraz uzun oldu ama olsun. Bu teknik bir yazı olmadığından, biraz muhabbet tadında ve motive edici olmasında bir sorun yok bence.</p>
<p>Nasıl bir proje geliştirdiğimiz bu noktada önem arz ediyor. Örneğin ben genelde  sipariş takip, üretim takip gibi projeler geliştiriyorum. En genel adı ile ERP ve CRM tarzı progamlar. Uzmanlık alanım bu diyebilirim. Elbette kendimi yine de bu alanla sınırlamıyorum. Hobi olarak da farklı konularda da projeler çıkarmaya çalışıyorum.</p>
<p>Konu ERP ve CRM tarzı programlar olduğundan dolayı vereceğim tavsiyelerde en çok bu tarz projeler geliştirenler için faydalı olacaktır. <strong>Bir yazılım projesine başlama</strong>dan önce bu yazı serimin tamamnını mutlaka okumanızı tavsiye ederim.</p>
<h3></h3>
<h3><strong>KOD Mantığı Kullanmak</strong></h3>
<p>Stok, Cari, Personel, Kullanıcı, İş Emri, Sipariş, Teklif vs. gibi kavramlarda her zaman <strong>Kodlama mantığı</strong> kullanılmalıdır. StokKodu, CariKodu vs. şeklinde kodlamalar ile gidilmesi bir çok açıdan faydalıdır. Yerine göre hayati bir önem taşır. Bu başlığı açıklarken Stok Tanımlarını ele alalım. Diğer tanımlar için de bu açıklamalar geçerlidir.</p>
<p>&nbsp;</p>
<h4> * Kod Mantığı Kullanmanın Amacı Nedir?</h4>
<p><strong>Kodlama mantığını</strong> kullanmadan bir stok kartı tanımladınız. Bu stok kartı ile işlemler yaptınız. Her yere bu stoğun adını kullandınız. Sonra bir şeyler oldu ve stoğun adını değiştirdiniz.</p>
<p>Bir gün, müdürünüz, adını değiştirdiğiniz stok (ürün) hakkında sizden raporlar istedi. Bu raporlarda örneğin, <em>&#8220;Şu stoğumuzdan elde ettiğimiz kazanç nedir?&#8221;</em>, <em>&#8220;Bu stoğumuz hakkında gelen şikayetler nelerdir?&#8221;</em> olsun. Bu stoğun adı ile database&#8217;de arattığınızda ne bulabileceksiniz? Ben size söyleyeyim. <strong><em>Hiçbir şey bulamayacaksınız.</em></strong> Her yerde stoğun adını kullandınız ve o her yerde kullandığınız adı değiştirdiniz. Eski adını hatırlıyorsanız soruları yanıtlayabilirsiniz ama hatırlayacağınızı hiç sanmıyorum.</p>
<p>Bazılarınız çıkacak <em>&#8220;Bizde ID (Identity) alanını kullanırız o halde!&#8221;</em> diyecek. Bende o zaman böyle düşünenlere şunu sorayım. <em>Ya stoğu bilerek yada bilmeyerek silip yeniden eklediysek?</em> <em>Silmek zorunda kaldıysak? Biz değilde başak birisi sildiyse?</em> O zaman her yerde kullandığım ID numarası da değişmiş olacak. Yine aynı soruna düşmüş olacağız.</p>
<p>Ancak bir kod kullandıysam&#8230; Stoğun adını değiştirsem de silip yeniden eklesem de stok kodu aynı olduğu sürece hiçbir sorun yaşamayacağım.</p>
<p>&nbsp;</p>
<h4><strong> * Hiyerarşik Yapı Kullanmaya Müsaittir</strong></h4>
<p>Eğer kodlama mantığını kullanır isek stokları rahatlıkla guruplayabiliriz.</p>
<p>Şirketimizde kullandığımız Sarf Stoklar için bir ana kod verelim ve bu ana kodda 010 olsun. Stok kodu 010 ile başlayan bir stok gördüğümüzde anında bunun bir sarf stok olduğunu artık anlayabiliriz. Bir alt kod daha verelim ve 001 diyelim. 001 ise Ofis Sarfları olsun. Son olarak da stoğun kendine bir kod verelim ve ona da 0001 diyelim. Stoğumuzun kendisi de A4 Kağıt olsun.</p>
<p>Bu A4 stoğunun kodu 010.001.0001 oldu. Şimdi bu stok koduna baktığımız anda bunun bir sarf stok olduğunu ve bu sarf stoğunun da ofiste kullanılan bir sarf olduğunu rahatlıkla anlayabiliriz.</p>
<p>Bu kısmı belirledik ve diğer stoklarımızı da tanımladık. Zımba, zımba teli, poşet dosya, mavi dosya, klasör vs. tüm stoklarımızı bu kodlama mantığına göre ekledik. Şimdi de Kalite biriminin kullandığı sarf stokları için bir gruplama verelim.</p>
<p>Stok ana kodumuz yine 010 ama bu sefer farklı birim için olduğundan alt kodunu değiştirip 002 yapalım. Stoğun kodu ise yine 0001 &#8216;en başlayacak. ekleyeceğimiz ilk stok da AAAA olsun.</p>
<p>Burada ayraç olarak ( &#8211; ) , ( . ) yada ( &#8216; &#8216; &#8211; boşluk )  kullanabiliriz. Hiç karakter kullanmadan da yapabilirsiniz ama okunabilirlik açısından kötü olacaktır ama veri boyutu açısından olumlu olacaktır.</p>
<ul>
<li>010 &#8211; Sarf Stoklar</li>
<li>010.001 &#8211; Ofis Sarfları</li>
<li>010.001.0001 &#8211; A4 Kağıdı</li>
<li>010.001.0002 &#8211; Zımba Teli</li>
<li></li>
<li>010.002 &#8211; Kalite Sarfları</li>
<li>010.002.0001 &#8211; AAAA</li>
<li>010.002.0002 &#8211; BBBB</li>
<li>010.003 &#8211; Üretim Sarfları</li>
<li>010.004 &#8211; Depo Sarfları</li>
<li>020 &#8211; Ham Maddeler</li>
<li>030 &#8211; Yarı Mamuller</li>
<li>040 &#8211; Mamuller</li>
</ul>
<p>Daha net anlaşılması için bir görsel ile de destekleyelim. Aşağıdaki görselde örnek bir stok kodunu görmektesiniz.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-695" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak.png" alt="Bir Yazılım Projesine Başlamak -kod mantığını kullanma örnek görseli" width="973" height="392" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak.png 973w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-768x309.png 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/Bir-Yazılım-Projesine-Başlamak-850x342.png 850w" sizes="(max-width: 973px) 100vw, 973px" /></p>
<p>Şimdi neden 010 ile başladık. Yani neden 001 değil yada neden 100 değil. Bu aslında biraz keyfi. Yani 001&#8217;den de başlayabilirdim ama 999 farklı ana kod açılmasını gerektirecek kadar çok stok bilgisi görmedim. Yani 010 ana koduna ve 001 alt koduna bağlı 999 tane farklı stoktan bahsediyorum&#8230; Belki dünya çapında iş yapan e-ticaret siteleri için 999 bile yetmeyebilir ve ana kod 0001&#8217;den başlayabilir. Bu biraz şirketlerin yaptığı işe bağlı. Bunu siz belirleyeceksiniz.</p>
<p>Aynı şekilde alt kod içinde geçerli çok fazla alt koda ihtiyaç yok ise iki karakter de olabilir tek karakterde. Ve yine aynı şeyler stoğun kodu içinde geçerli.</p>
<p>&nbsp;</p>
<h4><strong> * Rakam Kullanmak Neden Önemlidir?</strong></h4>
<p>Bu konu hakkında son olarak rakam değilde harf de kullanabilirsiniz. Ancak rakam kullanmanızı tavsiye ederim. Burası aslında ince bir nokta. Verilerin saklanma şekli ile ilgili. Veri tipi int yada string olması bir anlam ifade etmiyor rakamlar için. Çok büyük bir fark oluşturmasa da veri boyutu açısından olabildiğince daha az yer tutmasını istiyoruz. Bu sebeple de olabildiğince harf kullanmaktan kaçınıyoruz. Aynı zamanda <strong>Veritabanı için performans</strong> açısında da faydalı olacaktır..</p>
<p>Elbette her şirkette milyonlarca stok olmayacaktır. Belki bazılarında 100&#8217;ü bile geçmiyordur ama bu şekilde bir kodlama yapılması bence es geçilmemelidir.</p>
<p>&nbsp;</p>
<h4><strong>Kodlama Mantığı sizin Hayal Gücünüze Bağlı</strong></h4>
<p><em>&#8220;Sadece stoklardan bahsettin. Diğerlerinde bunları nasıl kullanacağız?&#8221;</em> diye düşünmüş olabilirsiniz. Aklınızdan şöyle bir geçmiş de olabilir. Kısaca bahsedeyim.</p>
<p>Cari bilgileri için örnek kodlama; Biliyorsunuz muhasebe de cariler 120 ve 320 olarak gruplanırlar. 120&#8217;li cariler Alıcılar olarak bilinir. 320&#8217;li cariler ise Satıcılar olarak bilinir. <em>Fark ettiniz mi?</em></p>
<p>Ana kodumuz bu olacak elbette. Bir bakıma <em>olmak zorunda</em> diyebiliriz.  <em>Şimdi ana kodumuz belli olduğuna göre alt kodumuz ne olabilir? Alt kod olarak ne belirlersek mantıklı olur? Aklınıza bir şey geldi mi?</em> Türkiye&#8217;de yaşıyoruz. O halde alt kodumuzu şehir kodlarını verebiliriz. Son kodumuz ise zaten belli. Sıra numarası. O halde şöyle bir bakalım kodumuza.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-696" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/KOD-Mantığı-Kullanmak.png" alt="KOD Mantığı Kullanmak - cari kodlama şekli örneği" width="973" height="392" srcset="https://dinamiknetwork.com/wp-content/uploads/2019/12/KOD-Mantığı-Kullanmak.png 973w, https://dinamiknetwork.com/wp-content/uploads/2019/12/KOD-Mantığı-Kullanmak-768x309.png 768w, https://dinamiknetwork.com/wp-content/uploads/2019/12/KOD-Mantığı-Kullanmak-850x342.png 850w" sizes="(max-width: 973px) 100vw, 973px" /></p>
<p><em>Başka neyimiz vardı?</em> Personel&#8217;ler var. Örnek bir personel kodu şekline bakalım&#8230;</p>
<p>Şirketteki tüm departmanların birer kodları olduğunu varsayalım. 01 Yönetim, 02 Muhasebe, 03 Finans vs. vs. Personellerimizi de çalıştığı departmanlara göre kodlayabiliriz. Burada şunu da söylemeden geçme olmak. Şirkette personellerin pozisyonları sürekli bir şekilde değişme eğilimi gösteriyor ise Personeller için bu şekilde bir kodlama sıkıntılı olabilir. Öyle bir durumda Personel&#8217;in mesleğine göre kodlama da yapılabilir. Aynı şekilde program kullanıcıları içinde bir kodlama yapılabilir.</p>
<p><img wpfc-lazyload-disable="true" loading="lazy" class="alignnone size-full wp-image-697" src="https://dinamiknetwork.com/wp-content/uploads/2019/12/Kod-Mantığı-Kullanmanın-Amacı-Nedir.png" alt="Kod Mantığı Kullanmanın Amacı Nedir" width="625" height="340" /></p>
<p>İş Emirleri&#8217;nden de bahsetmiştik. O en basiti aslında&#8230; Aşağıda iki örnek vereyim.</p>
<ul>
<li>19-SP-256-0000001
<ul>
<li>19 = Yıl</li>
<li>SP = Sipariş Evrak Serisi</li>
<li>256 = Sipariş Evrak Sırası (Kaçıncı Sipariş)</li>
<li>0000001 = Verilen İş Emrinin Sırası</li>
</ul>
</li>
<li>IH-19-0000001
<ul>
<li>YD = Yurt Dışına üretim olduğu bilgisi (YI = Yurt İçi üretim, ST= Stoğa üretim)</li>
<li>19 = Yıl</li>
<li>0000001 = Verilen İş Emrinin Sırası</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<h3>Bir Yazılım Projesine Başlamak Hakkında Son Olarak&#8230;</h3>
<p>Bu ve bunlar gibi kodlamalar yapabilirsiniz. Gerisi artık sizin hayal gücünüze kalmış olacak. Projenize ve projeyi geliştirdiğiniz şirkete göre neler yapmanız gerektiğine siz karar vereceksiniz ki bu yazıdan sonra bu kararı vermek artık çok kolay olacak. En azından benim düşüncelerim bu yönde&#8230; 🙂</p>
<p>Projeniz küçük olsa da siz büyük düşünün. Geleceğe yönelik düşünün ve projelerinizi öyle hazırlayın. Hayal ettiklerinizi yazmaya çalışın. Yöntemler arayın. En güzel en mantıklı yöntemi bulun ve projelerinize göre uyarlayın. Kendinizi geliştirmediğiniz her an geride kalıyorsunuz. Siz geri gitmiyorsunuz, herkes ilerliyor&#8230;.</p>
<p>Bu konuyu iyice anladığınızı düşünüyorum. Eğer anlamadığınız bir nokta var ise yorum olarak yazabilirsiniz. En kısa sürede cevap vereceğim&#8230;</p>
<hr />
<p><strong>Bir Yazılım Projesine Başlamak</strong> yazım ile <strong>yeni projeye başlarken dikkat edilmesi gerekenler </strong>yazı serisine başlamış olduk. Şimdilik bu kadar.</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-1/">Bir Yazılım Projesine Başlamak- Tavsiyeler #1</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-1/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
