<?xml version="1.0" encoding="windows-1254"?>
<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>Arda Çetinkaya &#187; Design Patterns</title>
	<atom:link href="http://www.minepla.net/tag/design-patterns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.minepla.net</link>
	<description>Yazılım ve geri kalan her şey ile ilgili arada saçmaladıklarım...</description>
	<lastBuildDate>Fri, 09 Dec 2011 08:42:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>IObserver ve IObservable ile biri bizi gözetliyor&#8230;</title>
		<link>http://www.minepla.net/2011/10/iobserver-ve-iobservable-ile-biri-bizi-gozetliyor/</link>
		<comments>http://www.minepla.net/2011/10/iobserver-ve-iobservable-ile-biri-bizi-gozetliyor/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 13:52:53 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=1677</guid>
		<description><![CDATA[Çok uzun bir ara vermiştim fark etmiş olduğunuz üzere&#8230;Ama şimdi kaldığım yerden devam ediyor ve fazla uzatmadan hemen bu yazının konusuna geliyorum&#8230; .NET Framework 4.0 ile gelen iki yeni arayüzü kısaca anlatmaya çalışacağım. IObservable&#60;T&#62; ve IObserver&#60;T&#62; yeni gelen arayüzlerimizden&#8230;Bu arayüzler “push-based notifications” diye literatürde yer alan sistemler oluşturmamız için faydalanabileceğimiz arayüzler. “push-based notifications” nedir ile [...]]]></description>
			<content:encoded><![CDATA[<p>Çok uzun bir ara vermiştim fark etmiş olduğunuz üzere&#8230;Ama şimdi kaldığım yerden devam ediyor ve fazla uzatmadan hemen bu yazının konusuna geliyorum&#8230; .NET Framework 4.0 ile gelen iki yeni arayüzü kısaca anlatmaya çalışacağım.</p>
<p><strong><a href="http://www.minepla.net/wp-content/uploads/fringe-the-observer.jpg"><img class="size-full wp-image-1678 alignleft" title="fringe-the-observer" src="http://www.minepla.net/wp-content/uploads/fringe-the-observer.jpg" alt="" width="240" height="231" /></a>IObservable&lt;T&gt;</strong> ve <strong>IObserver&lt;T&gt;</strong> yeni gelen arayüzlerimizden&#8230;Bu arayüzler “push-based notifications” diye literatürde yer alan sistemler oluşturmamız için faydalanabileceğimiz arayüzler. “push-based notifications” nedir ile başlasak sanırım daha kolay olacak bazı şeyler. Artık bir çok kişinin kullandığı sosyal paylaşım sitelerinden örnekler verebiliriz daha iyi anlamak için. Facebook’da örneğin, sayfa ile her hangi bir etkileşim olmadan zaman zaman sağdan soldan “1 tane mesajınız var”, “X kişisi Y’nin fotoğrafını beğendi” gibi bildirimler alıyoruz. Bu tarz bildirimlere “push-based notifications” diyoruz. Türkçeleştirmek için kasamadım açıkcası ama basitçe bir nesnenin, kendisine bağlanan ya da üye olan parçalara bildirimler göndererek, kendinde olan değişimleri bildirmesi olarak açıklayabiliriz. Gözlemci ve gözlenen olarak düşünürsek biraz daha netleşebilir sanırım. Bütün bu kavramlar aslında mevcut event yaklaşımı ile üstü kapalı olarak bize sunulmakta tüm yazılım geliştirme dillerinde. Ayrıca “Observer” tasarım kalıbı şeklinde de literatürde yerini uzun süredir korumakta.<br />
<span id="more-1677"></span><br />
<strong>IObservable</strong> ve <strong>IObserver</strong> arayüzleri de bu tasarım kalıbının .NET Framework’de ki yansıması. Peki neden yeni olarak .NET Framework 4.0 ile geldi ya da mevcut event yapısı zaten bu kavramları karşılamıyor mu sorularını sorabilirsiniz&#8230;Gelişen ihtiyaçlar ve kullanıcı eğilimlerinden dolayı asenkron çağrılar ve dağınık olay bazlı(distrubted events) yaklaşımları kendi sistemlerimizde, kendimize özgün yöntemler ile kullanmamız gerekebiliyor. Bundan dolayı bu iki arayüz ile daha kontrollü bir şekilde kendi “push-based notification” tarzı uygulamalarımızı .NET Framework ile daha kolay geliştirebiliyoruz. Bir örnek ile devam edip biraz daha netleştirelim.Yabacağımız örnek basit bir konsol uygulaması olup, doların yükselişini simule eden ve bu yükselişi takip eden bir uygulama olacak. Oldukça basit&#8230;Yine standart olarak kod üzerinden açıklamalar ile anlatmaya çalışacağım. O zaman başlıyoruz&#8230;</p>
<pre class="brush: csharp; title: ; notranslate">
    //IObservable arayüzünden gözlemnecek nesnemizin sınıfı yaratıyoruz.
    //T tipindeki nesne yarattığımız nesne ya da daha temel bir nesne olabilir.
    //IObservable arayüzünden türüyen sınıf, arayüzden gelen Subscribe()
    //metodunu tanımlamak durumda. Bu metod ile bu nesnemizi gözleyecek
    //nesneleri tanımlıyoruz.
    public class Dolar : IObservable
    {
        //Nesnemizi birden fazla gözlemci gözleyebileceği için
        //List tipinde bir nesne ile gözlemcileri saklayabileceğimiz
        //bir koleksiyon tanımlıyoruz.
        private List&gt; _subscribers;
        private int _amount;

        public Dolar()
        {
            _subscribers = new List&gt;();
        }

        public int Amount
        {
            get
            {
                return _amount;
            }
            set
            {
                _amount = value;
                //Nesnemizde oluşacak değişiklikleri gözlemcilere,
                //gözlemcilerin(-ki bunlar IObserver arayüzünden
                //yaratılan sınıflar) OnNext() metodu ile bildiriyoruz.
                foreach (var item in _subscribers)
                {
                    item.OnNext(this);
                }
            }
        }

        //Subscribe metodu IObservable arayüzünden gelen bir metod.
        //Bu metod ile nesnemizi gözlemleyecek diğer nesneleri belirtebiliyoruz.
        //Bir başka deyişle nesnemize abone olacak ve onun değişikliklerinden
        //etkilenecek olan nesneleri alıyoruz.
        //IDisposable tipinde bir dönüş değeri olmasının sebebi, gözlemcilerin
        //gerektiği zaman aboneliklerini iptal ettirebilmelerini sağlıyor.
        //Bu örnekte bu konuya değinmedim.Belki ileride
        public IDisposable Subscribe(IObserver observer)
        {
            if (!_subscribers.Contains(observer))
                _subscribers.Add(observer);

            return null;
        }
    }
</pre>
<p>Gözlenecek nesnemizin sınıfı oluşturduktan sonra, bu nesne üzerindeki değişiklikleri takip ve kontrol edeceğimiz, gözlemci nesnelerimizin sınıflarını aşağıdaki gibi yazabiliriz.</p>
<pre class="brush: csharp; title: ; notranslate">
    //Aşağıdaki örnek sınıfta, IObserver arayüzünden yarattığımız nesne
    //CurrencyTracker nesnesi, Dolar tipinde ki nesneleri gözlemleyecek.
    //IObserver arayüzünden gelen 3 tane zorunlu metod var.
    //OnNext() metodu ile değişen datayı gözlemciye bildiriyoruz,
    //OnError() metodu ile hata oluştuğu durumları gözlemciye bildirebiliyoruz,
    //OnCompleted() metodu ile de bildirimlerin tamamlandığı bilgisini verebiliyoruz.
    public class CurrencyTracker : IObserver
    {
        public CurrencyTracker()
        {

        }

        public void OnCompleted()
        {
            Console.WriteLine(&quot;İşlem Tamamlandı&quot;);
        }

        public void OnError(Exception error)
        {
            Console.WriteLine(&quot;Hata oluştu&quot;);
        }

        public void OnNext(Dolar value)
        {
            Console.WriteLine(&quot;Dolar'ın değeri:{0} &quot;,value.Amount);
        }
    }

    //Bu örnek için, yukardaki diğer gözlemciye benzeyen başka bir
    //gözlemci, aynı mantıkla çalışmakta.Ek olarak OnNext() metodunda
    //gelen veri değerini kontrol ediyor.
    public class LimitTracker : IObserver
    {

        public LimitTracker()
        {

        }

        public void OnCompleted()
        {
            Console.WriteLine(&quot;İşlem Tamamlandı&quot;);

        }

        public void OnError(Exception error)
        {
            Console.WriteLine(&quot;Hata oluştu&quot;);
        }

        public void OnNext(Dolar value)
        {
            if(value.Amount&gt;70)
                Console.WriteLine(&quot;Dolar'ın değeri çok yüksek: {0} .Kriz olabilir.&quot;, value.Amount);
        }
    }
</pre>
<p>Son olarak ise yazdığımız kodların nasıl çalıştığını görmek adına aşağıdaki gibi basit bir konsol uygulaması yazıyoruz.</p>
<pre class="brush: csharp; title: ; notranslate">
    class Program
    {
        static void Main(string[] args)
        {

            Dolar d = new Dolar();
            CurrencyTracker ct = new CurrencyTracker();
            LimitTracker lt = new LimitTracker();

            //Dolar nesnemize abone oluyoruz ve gözlemlemeye başlıyoruz
            d.Subscribe(lt);
            d.Subscribe(ct);

            //1000 milisaniye de bir Dolar tipindeki nesnemizin Amount değerini
            //değiştiriyoruz.
            Timer t = new Timer((s) =&gt;
            {
                d.Amount = new Random().Next(100);
            }, null, TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(1000));

            Console.ReadLine();
        }
    }
</pre>
<p>Örnek uygulamamızın çıktısı da aşağıdaki gibi olacaktır&#8230;</p>
<p><a href="http://www.minepla.net/wp-content/uploads/Capture.jpg"><img class="aligncenter size-full wp-image-1683" title="Observer" src="http://www.minepla.net/wp-content/uploads/Capture.jpg" alt="" width="689" height="350" /></a></p>
<p>Şimdilik bu kadar&#8230;Oldukça basit bir örnekle .NET 4.0 ile gelen IObserverve IObservableaçıklamaya çalıştım, umarım biraz olsun faydası olur.</p>
<p>Örnek projeyi <a href="https://skydrive.live.com/?cid=f66549bc9e13f731&amp;sc=documents&amp;id=F66549BC9E13F731%21560#" target="_blank">buradan </a>indirebilirsiniz&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2011/10/iobserver-ve-iobservable-ile-biri-bizi-gozetliyor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Enterprise Library 5.0 versiyonu yayınlandı&#8230;</title>
		<link>http://www.minepla.net/2010/04/microsoft-enterprise-library-5-yayynland/</link>
		<comments>http://www.minepla.net/2010/04/microsoft-enterprise-library-5-yayynland/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 17:14:26 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=1138</guid>
		<description><![CDATA[patterns &#38; practices ekibinden uzun süredir beklenen haber geldi. Microsoft Enterprise Library 5.0 versiyonu son halini alıp yayınlandı.  Bu adresten kütüphanenin kurulum dosyalarını ve kaynak kodlarını indirip, kendi geliştirmekte olduğunuz uygulamalarda kullanabilirsiniz. Ayrıca ayrıntılı bilgi ve dökümantasyon için de MSDN sayfasına göz atmanızı tavsiye ederim.]]></description>
			<content:encoded><![CDATA[<p>patterns &amp; practices ekibinden uzun süredir beklenen haber geldi. Microsoft Enterprise Library 5.0 versiyonu son halini alıp yayınlandı.  <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=bcb166f7-dd16-448b-a152-9845760d9b4c&amp;displaylang=en" target="_blank"><strong>Bu adresten</strong></a> kütüphanenin kurulum dosyalarını ve kaynak kodlarını indirip, kendi geliştirmekte olduğunuz uygulamalarda kullanabilirsiniz.</p>
<p>Ayrıca ayrıntılı bilgi ve dökümantasyon için de <a href="http://msdn.microsoft.com/en-us/library/ff632023.aspx" target="_blank"><strong>MSDN sayfasına</strong></a> göz atmanızı tavsiye ederim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2010/04/microsoft-enterprise-library-5-yayynland/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Okumak lazım&#8230;</title>
		<link>http://www.minepla.net/2009/08/okumak-lazym/</link>
		<comments>http://www.minepla.net/2009/08/okumak-lazym/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 10:33:36 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=468</guid>
		<description><![CDATA[Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries .Net ile uygulama geliştiren herkesin okuması gerekli olan bir kitap. Uzun zaman önce almış okumuştum,şimdi tekrardan bilgilerimi tazeliyorum. .Net Framework&#8217;ü geliştirilirken ki yaklaşımların paylaşıldığı,süper öğretici bir kitap&#8230; 2. baskısı çıktı. .NET 3.5 ile ilgili,ona da bakın derim&#8230; Pro ASP.NET MVC Framework En son aldığım [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321545613/ref=sr_1_1?ie=UTF8&amp;qid=1249981556&amp;sr=8-1" target="_blank"><strong>Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries</strong></a></p>
<p style="text-align: left;"><img class="alignleft" title="Framework Design Guidelines" src="http://ecx.images-amazon.com/images/I/5138dM4PHnL._SL500_AA240_.jpg" alt="" width="168" height="168" />.Net ile uygulama geliştiren herkesin okuması gerekli olan bir kitap. Uzun zaman önce almış okumuştum,şimdi tekrardan bilgilerimi tazeliyorum. .Net Framework&#8217;ü geliştirilirken ki yaklaşımların paylaşıldığı,süper öğretici bir kitap&#8230; 2. baskısı çıktı. .NET 3.5 ile ilgili,ona da bakın derim&#8230;</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left; "><a href="http://www.amazon.com/Pro-ASP-NET-Framework-Steven-Sanderson/dp/1430210079/ref=sr_1_1?ie=UTF8&amp;qid=1249981793&amp;sr=8-1" target="_blank"><strong>Pro ASP.NET MVC Framework</strong></a></p>
<p style="text-align: left; "><img class="alignright" title="Pro Asp.Net MVC Framework" src="http://ecx.images-amazon.com/images/I/51AccYmg-TL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg" alt="" width="144" height="144" />En son aldığım kitap. Düşündüğümden de çabuk elime ulaştı,düşündüğümden de hızlı okuyorum&#8230;ASP.NET MVC Framework ile geliştirme yapıyorsanız mutlaka elinizin altında bulunması gereken bir kitap. Çok güzel örnekleri var,temel konular ile başlayıp,ileri düzey ASP.NET MVC Framework konularına da değinilmiş bir kitap.</p>
<p style="text-align: left; ">
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2009/08/okumak-lazym/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp.Net MVC Framework&#8217;de Entity Framework hatası&#8230;</title>
		<link>http://www.minepla.net/2009/08/asp-net-mvc-frameworkde-entity-framework-hatasy/</link>
		<comments>http://www.minepla.net/2009/08/asp-net-mvc-frameworkde-entity-framework-hatasy/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 10:41:16 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Entity Framework]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=465</guid>
		<description><![CDATA[Compiler Error Message: CS0012: The type &#8216;System.Data.Objects.DataClasses.EntityObject&#8217; is defined in an assembly that is not referenced. You must add a reference to assembly &#8216;System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8242;. Asp.NET MVC Framework ile Entity Framework kullanmak isteyebilirsiniz&#8230;Bakınız ben&#8230;Çok basit bir işlem için tüm kodlarımı yazdım,ilgili referanslarımı verdim.Projelerimi derledim ve hiç bir hata almadım. Ta ki projeyi çalıştırana [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Compiler Error Message: CS0012: The type &#8216;System.Data.Objects.DataClasses.EntityObject&#8217; is defined in an assembly that is not referenced. You must add a reference to assembly &#8216;System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8242;.</p></blockquote>
<p>Asp.NET MVC Framework ile Entity Framework kullanmak isteyebilirsiniz&#8230;Bakınız ben&#8230;Çok basit bir işlem için tüm kodlarımı yazdım,ilgili referanslarımı verdim.Projelerimi derledim ve hiç bir hata almadım. Ta ki projeyi çalıştırana kadar&#8230;</p>
<p>Projeyi çalıştırdığımda yukarıdaki gibi bir hata aldım. İlgili bir DLL dosyasını bulamamadan kaynaklanan çok tanıdık bir hata. Proje referanslarımı kontrol ettim baktım düzgün,olması gereken tüm DLL&#8217;ler var&#8230;İlginç&#8230;</p>
<p>Sonra ASP.NET MVC Framework&#8217;te runtime&#8217;da bir sürü işlemlerin arka tarafta yapıldığı aklıma geldi ve runtime&#8217;da gerekli olacak bu DLL&#8217;in bir şekilde runtime sırasında yüklenmediği kanatine vardım.Ve tabi ki ilk baktığım yer web.config&#8217;deki assemblies kısmı oldu. Buraya aşağıdaki satırı ekleyince artık her şey istediğim gibi oldu.</p>
<blockquote><p>&lt;add assembly=&#8221;System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089&#8243;/&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2009/08/asp-net-mvc-frameworkde-entity-framework-hatasy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC RC2 çıktı&#8230;</title>
		<link>http://www.minepla.net/2009/03/aspnet-mvc-rc2-cykty/</link>
		<comments>http://www.minepla.net/2009/03/aspnet-mvc-rc2-cykty/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 19:35:29 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=290</guid>
		<description><![CDATA[Sona doğru yaklaşıyoruz sanırım. ASP.NET için geliştirilmekte olan MVC Framework&#8217;ünün RC2 versiyonu yayınlandı. Yeni versiyon setup ve deployment konularında yenilikler içeriyor. En önemli yenilik hosting şirketleri için özel kurulum modu diyebilirim. Daha fazla ayrıntıyı buradan öğrenebilirsiniz.]]></description>
			<content:encoded><![CDATA[<p>Sona doğru yaklaşıyoruz sanırım. ASP.NET için geliştirilmekte olan MVC Framework&#8217;ünün RC2 versiyonu yayınlandı. Yeni versiyon setup ve deployment konularında yenilikler içeriyor. En önemli yenilik hosting şirketleri için özel kurulum modu diyebilirim. Daha fazla ayrıntıyı <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ee4b2e97-8a72-449a-82d2-2f720d421031&amp;displaylang=en" target="_blank">buradan</a> öğrenebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2009/03/aspnet-mvc-rc2-cykty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp.net MVC framework betası çıktı&#8230;</title>
		<link>http://www.minepla.net/2008/10/aspnet-mvc-framework-betasy-cykty/</link>
		<comments>http://www.minepla.net/2008/10/aspnet-mvc-framework-betasy-cykty/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 06:56:55 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=172</guid>
		<description><![CDATA[Priview 4&#8242;den sonra Beta şeklinde yavaş yavaş son halini alan MVC framework&#8217;ü çıktı. Scott Guthrie&#8217;nin ayrıntılı haberini buradan okuyabilirsiniz.]]></description>
			<content:encoded><![CDATA[<p>Priview 4&#8242;den sonra Beta şeklinde yavaş yavaş son halini alan MVC framework&#8217;ü çıktı. Scott Guthrie&#8217;nin ayrıntılı haberini <a href="http://weblogs.asp.net/scottgu/archive/2008/10/16/asp-net-mvc-beta-released.aspx" target="_blank">buradan </a>okuyabilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2008/10/aspnet-mvc-framework-betasy-cykty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ne &#8220;Model-View-Controller&#8221; mı?</title>
		<link>http://www.minepla.net/2007/10/ne-model-view-controller-my/</link>
		<comments>http://www.minepla.net/2007/10/ne-model-view-controller-my/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 12:38:22 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Miyop]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=89</guid>
		<description><![CDATA[“Tasarım kalıpları”(design patterns) kavramları her yazılımcının bir şekilde duyduğu, hatta çoğu yazılımcının başvurduğu mimari yaklaşımlar olarak yazılım mühendisliği alanında yer etmiştir. Kimileri ne gerek var, kimileride olmazsa olmaz gibi yaklaşımlarla tasarım kalıpları hakkında düşüncelerini belirtsede ister istemez bir şekilde her yazılımcının fark etmeden bile biraz olsun kullandığı bazı kalıplar vardır. MVC(Model View Controller) bunlardan biridir, [...]]]></description>
			<content:encoded><![CDATA[<p>“Tasarım kalıpları”(design patterns) kavramları her yazılımcının bir şekilde duyduğu, hatta çoğu yazılımcının başvurduğu mimari yaklaşımlar olarak yazılım mühendisliği alanında yer etmiştir. Kimileri ne gerek var, kimileride olmazsa olmaz gibi yaklaşımlarla tasarım kalıpları hakkında düşüncelerini belirtsede ister istemez bir şekilde her yazılımcının fark etmeden bile biraz olsun kullandığı bazı kalıplar vardır. MVC(Model View Controller) bunlardan biridir, hatta farkında olmadan en çok kullanılan tasarım kalıplarından biridir. Bunun nedeni uygulama geliştirme araçlarının artık bu tarz kalıplar ile geliştirme yapmakta kolaylık sunuyor olması. Bu kısma fazla girmeden MVC’nin ne olduğunu biraz daha açalım.</p>
<p><span id="more-89"></span></p>
<p>Mimari yönden önemli olan seperation of concerns(ilgilerin ayrımı), MVC’nin temelinde olan en önemli olan kavramdır. Peki ne demek bu ilgilerin ayrımı ya da neden gerekli? En basitinden çok kullanılan “iş mantığı(business logic) ve veri yapısının(data) birbirinden ayrımı” ilgilerin ayrımı kavramına en soyut örnek olabilir. Yazılımı oluşturan kavramların bir birinden ayrılması, kendi özelliklerinin bağımsız olarak ele alınması ilgilerin ayrımı olarak adlandırılabilir. Neden gerekli olduğuna gelince de, bu yazılımın yenilenebilir ve canlı olması gerektiği gibi mimarı yaklaşımlar ile açıklanabilir.</p>
<p>Basit bir örnek ile ilgileri neden ayırmak gerektiğini biraz daha açalım. Bir uygulama düşünün, belli iş kurallarına göre, belli bir data üzerinde işlemler yapan ve bunları müşteriler ile paylaşan.  Ve bunları yaparken iş mantığının da arayüz ile beraber iç içe yapıldığını farz edin. En basitinden iş mantığında ki bir değişiklik, arayüz kodlarına müdahale edilmesine, basit bir deployment güncellemesinde komple tekrar bütün kodların işleme alınmasına neden olacaktır. Bu sadece çıkabilecek basit bir sorun.</p>
<p>Değişen iş mantığının data yapısına,yada kullanıcı arayüzüne etkisi minimum derecede olması gerekmektedir. Bu kısımda MVC yaklaşımı ortaya çıkıyor.</p>
<p>MVC yaklaşımında;</p>
<p><strong>Model:</strong>Uygulama tarafından sunulacak olan bilgiler Model ismi altında ele alınıyor.  Business işlemleri  sonuçlarında yorumlanmış data,ya da ham data Model altında ele alınabilir. Bu datalar,bir web servisinden,bir dosyadan yada bir database’den geliyor olabilir. Kısaca nereden ya da nasıl geldiği önemli olmayan veri kümeleri Model çatısı altında ele alınır. Örnek vermek gerekirse de .NET’deki DataSet,DataTable kavramları gösterilebilir.</p>
<p><strong>View:</strong>Model’in görüntülendiği kısımdır. Daha da anlaşılır olarak, UI(userinterface) kısmı View çatısı altında ele alınır. ASP.NET’deki Aspx sayfaları ve .ascx kullanıcı kontrolleri view çatısı altında ele alınabilecek kavramlar olarak örnek gösterilebilir.</p>
<p><strong>Controller:</strong>View çatısı altındaki elemanların etkişelimleri Controller altında ele alınır. Model üzerinde değişiklikler yapılabilmesini sağlayan işlemler,işlemleri tetikleyen etkiler Controller çatısı altındadır. Yine .NET’deki event ve handler mekanizmaları örnek olarak gösterilebilir.</p>
<p>Bir web uygulaması akışı üzerinden MVC mantığını biraz daha pekiştirelim.</p>
<ol>
<li>Kullanıcı web sayfasını(View) görüntüler.</li>
<li>Sayfa ile bir buton’a basarak etkileşime girer.</li>
<li>Bu etkileşim sonucunda ki olay veriye(Model) etki eder.(Controller)</li>
<li>Veri(Model) güncellenir,değişir, değişen yapıya göre tekrar View oluşur.</li>
</ol>
<p>Bu akıştan; View, Model’ın nasıl değişeceğini bilmez. Model için View’in nasıl olacağı önemli değildir, gibi yargılara ulaşabiliriz ki amacımız da buydu.</p>
<p>MVC’yi basitçe anlatabilmişimdir umarım, bu basit bilgilendirme umarım biraz daha bazı şeylerin netleşmesinde yardımcı olmuştur. İlerleyen zamanlarda  benzer konular ile bu yönde öğrendiklerimi,yaptıklarımı paylaşacağım.Sizinde düşünce ve fikirleriniz varsa, benimle paylaşmaktan çekinmeyin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2007/10/ne-model-view-controller-my/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

