﻿
{"id":5869,"date":"2017-04-01T08:32:14","date_gmt":"2017-04-01T08:32:14","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5869"},"modified":"2017-04-01T08:40:23","modified_gmt":"2017-04-01T08:40:23","slug":"c-iterator-design-patterniterator-tasarim-deseni","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-iterator-design-patterniterator-tasarim-deseni\/","title":{"rendered":"C# Iterator Design Pattern(Iterator Tasar\u0131m Deseni)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Behavioral Patterns(Davran\u0131\u015fsal Kal\u0131plar) kategorisinde bulunan Iterator Design Pattern \u00fczerine i\u00e7erik olu\u015fturaca\u011f\u0131z. Iterator T\u00fcrk\u00e7e olarak an\u0131msatt\u0131\u011f\u0131 iterasyon kelimesine kar\u015f\u0131 gelmektedir. \u0130terasyon dedi\u011fimiz yap\u0131 bir \u00e7\u00f6z\u00fcme giden her ad\u0131m\u0131 tarif etmektedir. Kelimenin mahiyetiyle ilgili daha detayl\u0131 bilgiyi <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-iterator-kavrami-ve-yield-anahtar-sozcugu\/\" target=\"_blank\">C#\u2019ta Iterator Kavram\u0131 ve yield Anahtar S\u00f6zc\u00fc\u011f\u00fc<\/a> ba\u015fl\u0131kl\u0131 makaleden edinebilirsiniz.<\/p>\n<p>Yukar\u0131da yapt\u0131\u011f\u0131m\u0131z giri\u015fe nazaran iterasyonu farkl\u0131 bir a\u00e7\u0131dan da ele almak gerekirse e\u011fer &#8220;tekrarlay\u0131c\u0131&#8221; olarak tarif etmek yerinde olacakt\u0131r. Belirli i\u015flevleri, belirli \u015fartlar alt\u0131nda tekrarlayarak t\u0131pk\u0131 bir d\u00f6ng\u00fc misali i\u015flev yapan yap\u0131ya biz yaz\u0131l\u0131m terminolojisinde iterasyon diyoruz. Yaz\u0131l\u0131m terminolojisi ve iterasyon demi\u015fken direkt olarak benim akl\u0131ma <em>foreach d\u00f6ng\u00fcs\u00fc<\/em> gelmektedir.<\/p>\n<p><em>foreach d\u00f6ng\u00fcs\u00fc<\/em>, iterasyon mant\u0131\u011f\u0131yla \u00e7al\u0131\u015fan bir mekanizmad\u0131r. Haliyle bu mekanizman\u0131n kulland\u0131\u011f\u0131 kaynak niteli\u011findeki yap\u0131lar\u0131 genel olarak koleksiyonlar ve diziler olarak d\u00fc\u015f\u00fcnebiliriz. Bu yap\u0131lar\u0131n kal\u0131t\u0131msal durumlar\u0131na dikkat edersek e\u011fer <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-ienumerable-ve-ienumerator-interfaceleri-nedir-ve-nasil-kullanilir\/\" target=\"_blank\">IEnumerable<\/a> interface&#8217;inden t\u00fcremekteler ve bu tip sayesinde ortak bir noktada eri\u015filebilir hale gelmektedirler. Ayr\u0131ca IEnumerable tipi kal\u0131t\u0131m verdi\u011fi s\u0131n\u0131fa iterasyon \u00f6zelli\u011fi kazand\u0131rmaktad\u0131r.<\/p>\n<p>\u0130\u015fte bu makalemizde yukar\u0131da sizlere sunmu\u015f oldu\u011fum iterasyon mant\u0131k ve yap\u0131s\u0131nda olu\u015fturulan tasar\u0131m deseni \u00fczerine teknik olarak konu\u015faca\u011f\u0131z.<\/p>\n<h4>Peki Iterator Tasar\u0131m Deseni Nerelerde Kullan\u0131l\u0131r?<\/h4>\n<p>Bir veri k\u00fcmesini uygulamam\u0131zda di\u011fer k\u0131s\u0131mlar ile olan ba\u011flant\u0131s\u0131n\u0131 en aza indirmek i\u00e7in; listede yer alan nesnelerin, s\u0131ras\u0131yla uygulamadan soyutlanmas\u0131 amac\u0131yla kullan\u0131l\u0131r. Yani yap\u0131lacak olan i\u015flemdeki nesneler ile olan t\u00fcm kontroller iterasyon deseninde ger\u00e7ekle\u015ftirilir ve veri k\u00fcmesi \u00fczerinde bu iterasyonun kurallar\u0131 \u00e7er\u00e7evesinde bir d\u00f6ng\u00fc s\u00f6z konusu olur.<\/p>\n<p>\u015eimdi gelin bu desende kullanaca\u011f\u0131m\u0131z yap\u0131lar\u0131 inceleyelim.<\/p>\n<p>\u00d6ncelikle sizler a\u015fa\u011f\u0131daki UML \u015femas\u0131na g\u00f6z atarken bende kullanaca\u011f\u0131m\u0131z yap\u0131lara izahat getireyim&#8230;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5871\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni.png\" alt=\"C# Iterator Design Pattern(Iterator Tasar\u0131m Deseni)\" width=\"668\" height=\"273\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni.png 668w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni-300x123.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<ul>\n<li><strong><em>Aggregate<\/em><\/strong><br \/>\nVeri k\u00fcmesi i\u00e7erisinde dola\u015fmak i\u00e7in bir IIterator interface&#8217;i tipinden Iterator yarat\u0131lmas\u0131n\u0131 zorunlu tutan aray\u00fczd\u00fcr.<\/li>\n<li><strong><em>Iterator<\/em><\/strong><br \/>\nVeri k\u00fcmesi i\u00e7erisinde dola\u015fman\u0131n t\u00fcm \u015fart ve imzas\u0131n\u0131 bu aray\u00fcz belirlemektedir. Yani bir enumerator(say\u0131c\u0131) g\u00f6revi \u00fcstlenmektedir. Uzun laf\u0131n k\u0131sas\u0131, elimizdeki veri k\u00fcmesi \u00fczerinde d\u00f6ng\u00fc esnas\u0131nda verileri\/nesneleri elde edebilmemiz i\u00e7in gerekli i\u015flemleri\/kontrolleri\/\u015fartlar\u0131\/hususlar\u0131 tan\u0131mlar.<\/li>\n<li><strong><em>ConcreteAggregate<\/em><\/strong><br \/>\nVeri k\u00fcmesini bar\u0131nd\u0131ran nesnedir. Aggregate aray\u00fcz\u00fcn\u00fc uygulayarak Iterator nesnesini olu\u015fturur.<\/li>\n<li><strong><em>ConcreteIterator<\/em><\/strong><br \/>\nIterator aray\u00fcz\u00fcn\u00fc uygulayan ve i\u00e7erisinde iterasyon metot ve \u00f6zelliklerini bar\u0131nd\u0131ran, yukar\u0131da da bahsetti\u011fimiz enumerator g\u00f6revini \u00fcstlenen s\u0131n\u0131ft\u0131r.<\/li>\n<li><strong><em>Client<\/em><\/strong><br \/>\nDeseni kullanarak, belirtilen \u015fartlara g\u00f6re veri k\u00fcmesi i\u00e7erisindeki elemanlara eri\u015fen nesnemizdir.<\/li>\n<\/ul>\n<p>Evet&#8230; S\u0131ra geldi bu yap\u0131lar\u0131 kullanarak belli ba\u015fl\u0131 senaryolar\u0131 ger\u00e7ekle\u015ftirmeye. Bu i\u00e7eri\u011fimizde, belirli bir veri k\u00fcmesi \u00fczerinde periyodik olarak(<em>ki periyodunu kendimizin belirledi\u011fi<\/em>) bir d\u00f6ng\u00fc ve verilen iki tarih aras\u0131ndaki t\u00fcm hafta sonlar\u0131n\u0131 hesaplayarak bizlere getiren bir uygulamak olu\u015fturmak suretiyle iki farkl\u0131 \u00f6rnek senaryo \u00fczerinde \u00e7al\u0131\u015f\u0131p konumuzu noktaland\u0131raca\u011f\u0131z.<\/p>\n<h4><span style=\"color: #ff0000;\">1. Senaryo<\/span><\/h4>\n<p>\u00d6ncelikle yukar\u0131da da belirtti\u011fimiz gibi bu senaryomuzda periyodik olarak belirli kurallar \u00e7er\u00e7evesinde tekrarlayan bir d\u00f6ng\u00fc \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131z.<\/p>\n<p>\u0130lk olarak veri k\u00fcmesinde kullanaca\u011f\u0131m\u0131z entity yap\u0131s\u0131n\u0131 olu\u015ftural\u0131m. Ben \u00f6rnek olarak &#8220;Personel&#8221; isminde bir struct olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    struct Personel\r\n    {\r\n        public int Id { get; set; }\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan Aggregate aray\u00fcz\u00fcn\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IAggregate\r\n    {\r\n        IIterator CreateIterator();\r\n    }\r\n<\/pre>\n<p>Dikkat ederseniz IAggregate aray\u00fcz\u00fcm\u00fcz i\u00e7erisinde geriye IIterator d\u00f6nen CreateIterator metodu mevcuttur. Haliyle IIterator aray\u00fcz\u00fcn\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IIterator\r\n    {\r\n        \/\/Bir sonraki ad\u0131mda eleman var m\u0131?\r\n        bool HasItem();\r\n        \/\/Bir sonraki ad\u0131mdaki eleman\u0131 getir.\r\n        Personel NextItem();\r\n        \/\/Mevcut eleman\u0131 getir.\r\n        Personel CurrentItem();\r\n    }\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere Iterator aray\u00fcz\u00fcnde iterasyonda kullanaca\u011f\u0131m\u0131z metot ve \u00f6zellikler mevcuttur.<\/p>\n<p>Aray\u00fczleri olu\u015fturduktan sonra s\u0131ra bu aray\u00fczlerden t\u00fcreyen Concrete(somut) s\u0131n\u0131flara geldi. \u00d6ncelikle ConcreteAggregate s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class PersonelAggregate : IAggregate\r\n    {\r\n        List&lt;Personel&gt; PersonelListesi = new List&lt;Personel&gt;();\r\n        public void Add(Personel Model) =&gt; PersonelListesi.Add(Model);\r\n        public Personel GetItem(int index) =&gt; PersonelListesi&#x5B;index];\r\n        public int Count { get =&gt; PersonelListesi.Count; }\r\n        public IIterator CreateIterator() =&gt; new PersonelIterator(this);\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funa g\u00f6z atarsan\u0131z e\u011fer &#8220;PersonelAggregate&#8221; s\u0131n\u0131f\u0131 asl\u0131nda bir ConcreteAggregate s\u0131n\u0131f\u0131d\u0131r. \u0130\u00e7eri\u011finde IAggregate aray\u00fcz\u00fcn\u00fcn uygulatt\u0131\u011f\u0131 geriye &#8220;PersonelIterator&#8221; nesnesi d\u00f6nen CreateIterator metodunun d\u0131\u015f\u0131nda, veri k\u00fcmesini bar\u0131nd\u0131rmakta ve veri k\u00fcmesiyle ilgili ekleme, getirme vs. gibi ek i\u015flemleri ger\u00e7ekle\u015ftirmektedir.<\/p>\n<p>\u015eimdide s\u0131ra ConcreteIterator s\u0131n\u0131f\u0131n\u0131 olu\u015fturmaya geldi. Tabi bu s\u0131n\u0131f\u0131m\u0131z yukar\u0131da da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;PersonelIterator&#8221; s\u0131n\u0131f\u0131 olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        class PersonelIterator : IIterator\r\n        {\r\n            PersonelAggregate aggregate;\r\n            int currentindex;\r\n            public PersonelIterator(PersonelAggregate aggregate) =&gt; this.aggregate = aggregate;\r\n            public Personel CurrentItem() =&gt; aggregate.GetItem(currentindex);\r\n            public bool HasItem()\r\n            {\r\n                if (currentindex &lt; aggregate.Count)\r\n                    return true;\r\n                return false;\r\n            }\r\n            public Personel NextItem()\r\n            {\r\n                if (HasItem())\r\n                    return aggregate.GetItem(currentindex++);\r\n                return new Personel();\r\n            }\r\n        }\r\n<\/pre>\n<p>Evet&#8230; Dikkat ederseniz &#8220;PersonelIterator&#8221; s\u0131n\u0131f\u0131m\u0131zda iterasyon kurallar\u0131n\u0131n s\u0131n\u0131rlar\u0131n\u0131 belirlemi\u015f olduk.  Burada periyodumuz 1&#8217;er 1&#8217;er olarak tan\u0131mlanm\u0131\u015ft\u0131r. Tabi komutlar\u0131n algoritmik izahatine fazla girmeyece\u011fim. Analizi anlamak ve yorumlamak sizlere kalm\u0131\u015f.<\/p>\n<p>\u015eimdi in\u015fa etti\u011fimiz bu yap\u0131y\u0131 kullanal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            PersonelAggregate aggregate = new PersonelAggregate();\r\n            aggregate.Add(new Personel { Id = 1, Adi = &quot;Gen\u00e7ay&quot;, SoyAdi = &quot;Y\u0131ld\u0131z&quot; });\r\n            aggregate.Add(new Personel { Id = 2, Adi = &quot;Ahmet&quot;, SoyAdi = &quot;\u00c7akmak&quot; });\r\n            aggregate.Add(new Personel { Id = 3, Adi = &quot;Mehmet&quot;, SoyAdi = &quot;Asl\u0131bay&quot; });\r\n            aggregate.Add(new Personel { Id = 4, Adi = &quot;Ay\u015fe&quot;, SoyAdi = &quot;Solmaz&quot; });\r\n            aggregate.Add(new Personel { Id = 5, Adi = &quot;Fatma&quot;, SoyAdi = &quot;Nurg\u00fcl&quot; });\r\n\r\n            IIterator iterasyon = aggregate.CreateIterator();\r\n            while (iterasyon.HasItem())\r\n            {\r\n                Console.WriteLine($&quot;ID : {iterasyon.CurrentItem().Id}\\nAd\u0131 : {iterasyon.CurrentItem().Adi}\\nSoyad\u0131 : {iterasyon.CurrentItem().SoyAdi}\\n*****&quot;);\r\n                iterasyon.NextItem();\r\n            }\r\n\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>Projemizi derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki sonu\u00e7la kar\u015f\u0131la\u015fmaktay\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni-1.png\" alt=\"C# Iterator Design Pattern(Iterator Tasar\u0131m Deseni)\" width=\"160\" height=\"322\" class=\"aligncenter size-full wp-image-5887\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni-1.png 160w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni-1-149x300.png 149w\" sizes=\"auto, (max-width: 160px) 100vw, 160px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Iterator tasar\u0131m deseni sayesinde belirli bir periyotta d\u00f6ng\u00fcsel i\u015flem ger\u00e7ekle\u015ftirmi\u015f olduk. \u015eimdi s\u0131ra 2. senaryoya gelmi\u015f bulunmaktad\u0131r.<\/p>\n<h4><span style=\"color: #ff0000;\">2. Senaryo<\/span><\/h4>\n<p>2. senaryomuzda ise verilen iki tarih aras\u0131ndaki hafta sonlar\u0131n\u0131 yazd\u0131raca\u011f\u0131z. Burada da belirli periyotta bir i\u015flem yap\u0131lmas\u0131 s\u00f6z konusu oldu\u011fundan dolay\u0131 iterasyonel bir durum vard\u0131r diyebiliriz. Haliyle buyrun Iterator tasar\u0131m deseniyle bu i\u015flemi nas\u0131l yapaca\u011f\u0131m\u0131z\u0131 beraber icra edelim.<\/p>\n<p>\u00d6ncelikle Aggregate aray\u00fcz\u00fcm\u00fcz\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IAggregate\r\n    {\r\n        IIterator CreateIterator();\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan Iterator aray\u00fcz\u00fcm\u00fcz\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IIterator\r\n    {\r\n        bool HasDate();\r\n        DateTime CurrentDate();\r\n    }\r\n<\/pre>\n<p>\u015eimdide Concrete nesnelerimize ge\u00e7ebiliriz.<\/p>\n<p>\u00d6ncelikle ConcreteAggregate nesnemizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class DateTimeAggregate : IAggregate\r\n    {\r\n        public DateTime startDate;\r\n        public DateTime endDate;\r\n        public IIterator CreateIterator() =&gt; new DateTimeIterator(this);\r\n    }\r\n<\/pre>\n<p>Ve ard\u0131ndan ConcreteIterator nesnemizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class DateTimeIterator : IIterator\r\n    {\r\n        DateTimeAggregate aggregate;\r\n        DateTime currentDate;\r\n        public DateTimeIterator(DateTimeAggregate aggregate)\r\n        {\r\n            this.aggregate = aggregate;\r\n            currentDate = aggregate.startDate;\r\n        }\r\n        public DateTime CurrentDate() =&gt; currentDate;\r\n        public bool HasDate()\r\n        {\r\n            if (currentDate.DayOfWeek == DayOfWeek.Saturday || currentDate.DayOfWeek == DayOfWeek.Sunday)\r\n            {\r\n                int dayCount = currentDate.DayOfWeek == DayOfWeek.Saturday ? 1 : 6;\r\n                currentDate = currentDate.AddDays(dayCount);\r\n            }\r\n            else\r\n            {\r\n                int dayCount = (int)currentDate.DayOfWeek;\r\n                currentDate = currentDate.AddDays(6 - dayCount);\r\n                \/*6'dan ilgili g\u00fcn\u00fcn haftal\u0131k say\u0131s\u0131n\u0131 \u00e7\u0131kar\u0131rsak e\u011fer \r\n                 Cumartesi g\u00fcn\u00fcne kalan g\u00fcn\u00fc hesaplam\u0131\u015f oluruz.\r\n                 Haliyle bu hesab\u0131 ilgili tarihe eklersek e\u011fer\r\n                 o haftan\u0131n hafta sonuna ula\u015fm\u0131\u015f oluruz.*\/\r\n            }\r\n            return currentDate &lt; aggregate.endDate;\r\n        }\r\n    }\r\n<\/pre>\n<p>Yapm\u0131\u015f oldu\u011fumuz bu tasar\u0131y\u0131 kullanal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            DateTimeAggregate tarih = new DateTimeAggregate();\r\n            tarih.startDate = new DateTime(2017, 01, 01);\r\n            tarih.endDate = DateTime.Now;\r\n            IIterator iterator = tarih.CreateIterator();\r\n            while (iterator.HasDate())\r\n            {\r\n                Console.WriteLine(iterator.CurrentDate());\r\n            }\r\n\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>Projemizi derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z zaman a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi bir sonu\u00e7la kar\u015f\u0131la\u015fmaktay\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni.png\" alt=\"C# Iterator Design Pattern(Iterator Tasar\u0131m Deseni)\" width=\"166\" height=\"409\" class=\"aligncenter size-full wp-image-5894\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni.png 166w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/04\/C-Iterator-Design-PatternIterator-Tasar\u0131m-Deseni-122x300.png 122w\" sizes=\"auto, (max-width: 166px) 100vw, 166px\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi verdi\u011fimiz iki tarih aras\u0131ndaki hafta sonlar\u0131n\u0131 Iterator tasar\u0131m deseniyle hesaplam\u0131\u015f olduk.<\/p>\n<p>Iterator Design Pattern sayesinde periyodik yahut a\u015famal\u0131 i\u015flemleri \u00e7ok rahat bir \u015fekilde ve veri k\u00fcmesini uygulamadan soyutlarak kullanabilme olana\u011f\u0131 bulmu\u015f oluyoruz. <\/p>\n<p>E\u011fer ki Iterator Design Pattern&#8217;i ger\u00e7ek uygulamalar\u0131n\u0131zda kullan\u0131rsan\u0131z; gelecekte, bu g\u00fcn kulland\u0131\u011f\u0131n\u0131z [koleksiyon\/array\/dizi\/veri k\u00fcmeleri]&#8217;nden daha performansl\u0131 yap\u0131lar .NET k\u00fct\u00fcphanesine dahil edildi\u011finde bu yap\u0131larla mevcutlar\u0131 de\u011fi\u015ftirmek istedi\u011finizde uygulamadan ba\u011f\u0131ms\u0131zla\u015ft\u0131r\u0131lm\u0131\u015f ve soyutlanm\u0131\u015f olduklar\u0131ndan dolay\u0131 sadece ilgili kaynaklardaki tan\u0131mlar\u0131 de\u011fi\u015ftirmeniz yeterli olacakt\u0131r. Aksi taktirde projede kaynaklarla alakal\u0131 t\u00fcm noktalara m\u00fcdahale etmeniz gerekecek, haliyle SOLID prensiplerine uygun olmayacak tarzda bir geli\u015fimden ziyade de\u011fi\u015fim s\u00f6z konusu olacakt\u0131r.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar diliyorum&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Behavioral Patterns(Davran\u0131\u015fsal Kal\u0131plar) kategorisinde bulunan Iterator Design Pattern \u00fczerine i\u00e7erik olu\u015fturaca\u011f\u0131z. Iterator T\u00fcrk\u00e7e olarak an\u0131msatt\u0131\u011f\u0131 iterasyon kelimesine kar\u015f\u0131 gelmektedir. \u0130terasyon dedi\u011fimiz yap\u0131 bir \u00e7\u00f6z\u00fcme giden her ad\u0131m\u0131 tarif etmektedir. Kelimenin mahiyetiyle ilgili daha&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":5871,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,153],"tags":[72,1052,1655,1659,1660,1053,750,1658,1040,1657,1656,1115],"class_list":["post-5869","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-design-pattern","tag-aggregate","tag-behavioral-patterns","tag-c-iterator-design-pattern","tag-concreteaggregate","tag-concreteiterator","tag-davranissal-kaliplar","tag-design-pattern","tag-foreach-dongusu","tag-iterator","tag-iterator-design-pattern","tag-iterator-tasarim-deseni","tag-tasarim-desenleri"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5869","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=5869"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5869\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/5871"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}