﻿
{"id":4190,"date":"2016-04-27T12:16:10","date_gmt":"2016-04-27T12:16:10","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4190"},"modified":"2016-04-27T12:16:10","modified_gmt":"2016-04-27T12:16:10","slug":"tek-sorumluluk-prensibisingle-responsibility-principle-srp","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/","title":{"rendered":"Tek Sorumluluk Prensibi(Single Responsibility Principle &#8211; SRP)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/tek-sorumluluk-prensibisingle-responsibility-principle-srp-3\/\" rel=\"attachment wp-att-4198\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-4198 size-medium\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP-2-300x240.jpg\" alt=\"Tek Sorumluluk Prensibi(Single Responsibility Principle - SRP)\" width=\"300\" height=\"240\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP-2-300x240.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP-2.jpg 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Merhaba,<\/p>\n<p>D\u00fcnya \u00fczerinde genel ge\u00e7er kabul g\u00f6rm\u00fc\u015f ve\u00a0SOLID prensipleri diye nitelendirilen be\u015f adet tasar\u0131m deseninden &#8216;<em><strong>S<\/strong><\/em>&#8216; si olan Tek Sorumluluk Prensibi &#8211;\u00a0Single Responsibility Principle (SRP)&#8217;yi izah etmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n<p>Nesne Tabanl\u0131 Programlama yakla\u015f\u0131m\u0131nda temel unsur s\u0131n\u0131f yap\u0131lar\u0131d\u0131r. Bir proje in\u015fa s\u00fcrecinde s\u0131n\u0131flar in\u015faat\u0131n her bir katman\u0131nda kendilerine has g\u00f6rev icra eden i\u015f\u00e7ilerdir. E\u011fer bu i\u015f\u00e7ilere birden fazla g\u00f6rev y\u00fcklenirse(<em>ki biz bu g\u00f6revlere sorumluluk diyece\u011fiz<\/em>) ne kadar verim al\u0131nabilece\u011fini d\u00fc\u015f\u00fcnmenizi isterim. Evet, basit mant\u0131k d\u00fc\u015f\u00fcnelim. Bir in\u015faat i\u015f\u00e7isine bir yandan duvar\u0131 \u00f6rme ve bir yandan da tesisat\u0131 d\u00f6\u015feme i\u015fini verirseniz bu iki i\u015fin g\u00fcvenirli\u011fini aklen ne kadar tasdik edebiliriz?<\/p>\n<p>\u0130\u015fte OOP yap\u0131lar\u0131ndaki elemanlar\u0131m\u0131z\u0131nda \u00fcstlenece\u011fi g\u00f6revler sade ve sadece bir adet olmal\u0131d\u0131r.<\/p>\n<p>Yani dahada a\u00e7arsak e\u011fer,<\/p>\n<blockquote><p><span style=\"color: #003366;\"><em><strong>Her s\u0131n\u0131f ve metod sade ve sadece &#8216;Tek Bir Sorumlulu\u011fu&#8217; yerine getirmelidir.<\/strong><\/em><\/span><\/p><\/blockquote>\n<p>\u0130\u015fte tek sorumluluk prensibi bu manada \u015fekillenmi\u015ftir.<\/p>\n<p>Bir s\u0131n\u0131f yahut metoda bakt\u0131\u011f\u0131m\u0131z zaman sorumluluk olarak genelde o s\u0131n\u0131f yahut s\u0131n\u0131f i\u00e7erisindeki bir metod i\u015flevi akla gelmekte, bu i\u015flev sorumluluk(g\u00f6rev) olarak nitelendirilmektedir. Halbuki sizde bilirsiniz ki, \u00e7o\u011fu sorumluluk birden fazla s\u0131n\u0131f ve metod e\u015fli\u011finde yerine getirilmektedir.<\/p>\n<p>O halde sorumluluk alg\u0131m\u0131z\u0131 de\u011fi\u015ftirmeli ve a\u015fa\u011f\u0131daki gibi olgunla\u015ft\u0131rmal\u0131y\u0131z.<\/p>\n<blockquote><p><em><strong>Bir s\u0131n\u0131f\u0131n yahut metodun sorumlulu\u011fu, de\u011fi\u015fmesi i\u00e7in bulunan sebebidir.<\/strong><\/em><\/p><\/blockquote>\n<p>Anlayaca\u011f\u0131m\u0131z o ki, bir s\u0131n\u0131f\u0131n veya metodun sorumluluk olarak ba\u011fl\u0131l\u0131\u011f\u0131 kendisini de\u011fi\u015ftirmeye iten sebepleridir. O yap\u0131 ne kadar de\u011fi\u015fme sebebi arz ediyorsa o kadar sorumlulu\u011fu var demektir.<\/p>\n<blockquote><p><span style=\"color: #800080;\"><em><strong>Tek Bir Sorumlulu\u011fu yerine getirmek demek, ilgili s\u0131n\u0131f ya da metodun de\u011fi\u015fmek i\u00e7in sade ve sadece bir sebebinin bulunmas\u0131 demektir.<\/strong><\/em><\/span><\/p><\/blockquote>\n<p>E\u011fer ki bir s\u0131n\u0131f \u00fczerinde iki ayr\u0131 i\u015fi yap\u0131yorsan\u0131z iki ayr\u0131 de\u011fi\u015fiklik sebebiniz var demektir. Asl\u0131nda bu iki ayr\u0131 i\u015f i\u00e7in iki ayr\u0131 s\u0131n\u0131f\u0131n olmas\u0131 ger\u00e7e\u011fiyle y\u00fczle\u015fmek demektir.<\/p>\n<p>Elinizde 1000+ sat\u0131rl\u0131k bir s\u0131n\u0131f\u0131n\u0131z mevcutsa b\u00fcy\u00fck ihtimal bu prensibi \u00e7i\u011fniyorsunuz demektir.<\/p>\n<p>\u015eimdi SRP&#8217;ye \u00f6zel bir \u00f6rneklendirme yapal\u0131m.<\/p>\n<p>\u00d6rneklendirmemiz bir al\u0131\u015fveri\u015f senaryosu \u00fczerinden seyr edecektir. Al\u0131\u015fveri\u015f esnas\u0131nda kredi kart\u0131yla yap\u0131lacak \u00f6demeye \u00f6zel iki adet i\u015flem \u00f6rneklendirece\u011fiz. Bunlar, limit kontrol\u00fc ve \u00f6demenin ger\u00e7ekle\u015ftirilmesidir. \u015eimdi a\u015fa\u011f\u0131daki kod blo\u011funu inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AlisVeris\r\n    {\r\n        public double UrunFiyati { get; set; }\r\n        public bool LimitYeterliMi()\r\n        {\r\n            .\r\n            .\r\n            .\r\n            return true;\r\n        }\r\n        public bool AlisVerisTamamla()\r\n        {\r\n            .\r\n            .\r\n            .\r\n            return true;\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bu iki i\u015flemi tek bir s\u0131n\u0131f i\u00e7erisinde yaparak SRP&#8217;yi \u00e7i\u011fnemi\u015f olduk. \u00c7\u00fcnk\u00fc limit kontrol\u00fc ile ali\u015fveri\u015fi tamamlama i\u015flemleri birbirlerinden farkl\u0131 i\u015flemlerdir. Yapmam\u0131z gereken bu i\u015flemlere \u00f6zel s\u0131n\u0131flar olu\u015fturmakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class LimitKontrol\r\n    {\r\n        public bool LimitYeterliMi()\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    class AlisVerisYapici\r\n    {\r\n        public bool AlisVerisTamamla()\r\n        {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    class AlisVeris\r\n    {\r\n        public double UrunFiyati { get; set; }\r\n    }\r\n<\/pre>\n<p>Yapt\u0131\u011f\u0131m\u0131z bu i\u015flemlerin class diyagramlar\u0131n\u0131da inceleyerek olay\u0131 somutla\u015ft\u0131ral\u0131m.<\/p>\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.gencayyildiz.com\/blog\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/\" rel=\"attachment wp-att-4193\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4193\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP.jpg\" alt=\"Tek Sorumluluk Prensibi(Single Responsibility Principle - SRP)\" width=\"158\" height=\"184\" \/><\/a><\/td>\n<td><a href=\"http:\/\/www.gencayyildiz.com\/blog\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/tek-sorumluluk-prensibisingle-responsibility-principle-srp-2\/\" rel=\"attachment wp-att-4194\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4194\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP-1.jpg\" alt=\"Tek Sorumluluk Prensibi(Single Responsibility Principle - SRP)\" width=\"324\" height=\"238\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP-1.jpg 324w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/Tek-Sorumluluk-PrensibiSingle-Responsibility-Principle-SRP-1-300x220.jpg 300w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\"><strong><em>SRP&#8217;ye Ayk\u0131r\u0131<\/em><\/strong><\/td>\n<td style=\"text-align: center;\"><strong><em>SRP&#8217;ye Uygun<\/em><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Projemizi bu \u015fekilde kodlad\u0131\u011f\u0131m\u0131zda binlerce sat\u0131rl\u0131k metodlar ve s\u0131n\u0131flardan ar\u0131nd\u0131rm\u0131\u015f olmakla beraber, bir s\u0131n\u0131f\u0131n de\u011fi\u015ftirilmesi sebebini bire indirgemi\u015f oluruz. Kodumuz okunabilir, anla\u015f\u0131labilir ve g\u00f6n\u00fcl rahatl\u0131\u011f\u0131yla m\u00fcdahale edilebilir bir disiplinde olacakt\u0131r.<\/p>\n<p>Tabi ki de bu prensip kar\u0131\u015f\u0131klar\u0131 \u00f6nlemek ve anla\u015f\u0131labilirli\u011fi artt\u0131rmak a\u00e7\u0131s\u0131ndan da \u00f6nem te\u015fkil etmektedir. Ancak k\u00fc\u00e7\u00fck \u00e7apl\u0131 projelerde bu prensibi uygulamak faydadan \u00e7ok zulme girebilir. Nihayetinde yapaca\u011f\u0131n\u0131z i\u015fin boyutuna g\u00f6re hamlenizi tasarlayarak, o tasar\u0131ma g\u00f6re uygun prensipleri ve desenleri faaliyete sokmak daha maliyetli olacakt\u0131r.<\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar dilerim.<\/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, D\u00fcnya \u00fczerinde genel ge\u00e7er kabul g\u00f6rm\u00fc\u015f ve\u00a0SOLID prensipleri diye nitelendirilen be\u015f adet tasar\u0131m deseninden &#8216;S&#8216; si olan Tek Sorumluluk Prensibi &#8211;\u00a0Single Responsibility Principle (SRP)&#8217;yi izah etmeye \u00e7al\u0131\u015faca\u011f\u0131m. Nesne Tabanl\u0131 Programlama yakla\u015f\u0131m\u0131nda temel unsur&#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":4198,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1154],"tags":[1160,1156,1158,1159,1157,1155],"class_list":["post-4190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-principles","tag-design-principles","tag-single-responsibility-principle","tag-solid","tag-solid-prensipleri","tag-srp","tag-tek-sorumluluk-prensibi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4190","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=4190"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4190\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/4198"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}