{"id":158,"date":"2022-11-30T17:10:00","date_gmt":"2022-11-30T17:10:00","guid":{"rendered":"http:\/\/blog.firatyasar.com\/?p=158"},"modified":"2023-03-19T17:12:16","modified_gmt":"2023-03-19T17:12:16","slug":"software-design-patterns-part-iii","status":"publish","type":"post","link":"https:\/\/blog.firatyasar.com\/?p=158","title":{"rendered":"Software Design Patterns \u2013 Part III"},"content":{"rendered":"\n<h3 id=\"1771\"> Mikrokernel Architecture<\/h3>\n\n\n\n<p id=\"1a15\">Bu mimari, \u00fcr\u00fcn bazl\u0131 uygulamalarda yayg\u0131n bir \u015fekilde kullan\u0131l\u0131r. Bunun d\u0131\u015f\u0131nda eklenti mimarisi (plug-in architecture) olarak da bilinir. \u00dcr\u00fcn bazl\u0131 uygulamalar, farkl\u0131 versiyonlar\u0131 olan ve bir paket olarak indirilebilir haldedir. Bu mimari, \u00fc\u00e7\u00fcnc\u00fc parti \u00fcr\u00fcnlerde g\u00f6r\u00fclmesine ra\u011fmen baz\u0131 firmalar \u015firket i\u00e7i uygulamalar\u0131n\u0131, uygulamaya eklenebilir yeni \u00f6zellikler geli\u015ftirip s\u00fcr\u00fcm notlar\u0131yla birlikte bunlar\u0131 yay\u0131nlarlar. Ana uygulamaya eklenti olarak yeni \u00f6zellikler eklemek ve bunlar\u0131 izole ve birbirinden ayr\u0131 \u015fekilde geli\u015ftirmek i\u00e7in uygun bir mimaridir.<\/p>\n\n\n\n<p id=\"e3e7\">Bu mimari iki farkl\u0131 bile\u015fenden olu\u015fmaktad\u0131r: \u00e7ekirdek sistem (core system) ve eklenti mod\u00fclleri (plug-in modules). Mikro\u00e7ekirdek mimari genel olarak sistemi kullan\u0131labilir halde tutmak i\u00e7in az miktarda i\u015flevsellik gerektirir. Bir \u00e7ok i\u015fletim sistemi bu mimariyi kullan\u0131r. \u0130\u015f uygulamalar\u0131 taraf\u0131nda ise \u00e7ekirdek sistem genellikle \u00f6zel durumlar, \u00f6zel kurallar ve kompleks ko\u015fullu i\u015flemler i\u00e7in \u00f6zel bir kod i\u00e7mereyen i\u015f mant\u0131\u011f\u0131 olarak tan\u0131mlan\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/miro.medium.com\/v2\/resize:fit:988\/1*_Bulmyi1vfI2zRATkQb1Ww.png\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"2103\">Eklenti mod\u00fclleri ba\u011f\u0131ms\u0131zd\u0131r. \u00d6zelle\u015fmi\u015f i\u015flemeler, ek geli\u015ftirmeler ve \u00f6zel kod i\u00e7eren bu ba\u011f\u0131ms\u0131z bile\u015fenler, \u00e7ekirdek sistemin daha fazla i\u015f yetenekleri \u00fcretmesine y\u00f6nelik geli\u015ftirme veya geni\u015flemesini sa\u011flarlar.<br>Normal \u015fartlarda eklenti mod\u00fclleri birbirlerinden ba\u011f\u0131ms\u0131z olmal\u0131d\u0131rlar. Ama gerekirse birbirlerine ihtiya\u00e7 duyan eklenti mod\u00fclleri tasarlamakta m\u00fcmk\u00fcnd\u00fcr. Ba\u011fl\u0131l\u0131k problemleri ile u\u011fra\u015fmamak i\u00e7in eklenti mod\u00fclleri aras\u0131ndaki ileti\u015fim en d\u00fc\u015f\u00fck seviyede tutulmal\u0131d\u0131r.<\/p>\n\n\n\n<p id=\"e505\">\u00c7ekirdek sistem, hangi eklenti mod\u00fcllerinin mevcut olduklar\u0131n\u0131 ve onlar\u0131 nas\u0131l alaca\u011f\u0131 hakk\u0131nda bilgi sahibi olma ihtiyac\u0131 duyar. En yayg\u0131n y\u00f6ntemlerden birisi, bir \u00e7e\u015fit eklenti kay\u0131t defteri (registry) olu\u015fturmakt\u0131r. Bu kay\u0131t defteri, her eklenti mod\u00fcl\u00fc hakk\u0131nda ad\u0131, veri kontrat\u0131 ve uzaktan eri\u015fim protokol\u00fc gibi \u00e7e\u015fitli bilgileri bar\u0131nd\u0131r\u0131r.<\/p>\n\n\n\n<p id=\"f62c\">Eklenti mod\u00fclleri, \u00e7ekirdek sisteme OSGi (open service gateway initiative), mesajla\u015fma ve web servisler ile ba\u011flanabilir.<\/p>\n\n\n\n<p id=\"e073\">\u00c7ekirdek sistem ve eklenti mod\u00fclleri aras\u0131ndaki kontratlar, standart kontratlar ve \u00f6zel kontratlar olabilir. \u00d6zel kontartlar, \u00fc\u00e7\u00fcnc\u00fc parti taraf\u0131ndan geli\u015ftirilen ve \u00fczerinde herhangi bir kontrole sahip olunmayan eklenti bile\u015fenlerinin oldu\u011fu durumlarda bulunurlar. Bu gibi durumlarda eklenti kontratlar\u0131 ve standart kontratlar aras\u0131na bir adapt\u00f6r konulur. Ve b\u00f6ylece \u00e7ekirdek sistem her eklenti i\u00e7in \u00f6zel bir koda ihtiya\u00e7 duymaz.<\/p>\n\n\n\n<p id=\"f0ee\">Mikrokernel mimari ile ilgili en g\u00fczel \u00f6zelliklerden birisi, bu mimarinin di\u011fer mimarilerin bir par\u00e7as\u0131 olarak kullan\u0131labilmesidir.<br>Bu mimari, \u00e7ekirdek sistemde b\u00fcy\u00fck de\u011fi\u015fiklikler yapmadan uygulamaya yeni \u00f6zellikler ve fonskiyonellik eklemeyi sa\u011flar. \u00dcr\u00fcn temelli uygulamalarda mimarinin olu\u015fturulmas\u0131 esnas\u0131nda ilk tercih edilen mimari olmal\u0131d\u0131r.<\/p>\n\n\n\n<p id=\"c0ce\"><em>De\u011ferlendirme k\u0131sm\u0131 okudu\u011fum kitapta 6 ana ba\u015fl\u0131k alt\u0131nda toplan\u0131yor. Bu \u015fekildeki anlat\u0131m ho\u015fuma gitti\u011fi i\u00e7in ben de ayn\u0131 yap\u0131da de\u011ferlendirme k\u0131sm\u0131n\u0131 olu\u015fturdum.<\/em><\/p>\n\n\n\n<p id=\"3b0d\">Mikro \u00c7ekirdek Mimarisinin De\u011ferlendirilmesi;<\/p>\n\n\n\n<ul><li>\u00c7eviklik: Y\u00fcksek<br>&#8211; De\u011fi\u015fiklikler, izole bir \u015fekilde ve h\u0131zl\u0131ca implement edilebilir. Bu durum eklenti mod\u00fcllerinin birbiriyle minimum d\u00fczeyde konu\u015fmas\u0131n\u0131n bir avantaj\u0131d\u0131r.<\/li><li>Da\u011f\u0131t\u0131m Kolayl\u0131\u011f\u0131: Y\u00fcksek<br>&#8211; Eklenti mod\u00fclleri \u00e7al\u0131\u015fma zaman\u0131nda \u00e7ekirdek sisteme dinamik olarak eklenebilir ve bu da uygulaman\u0131n \u00e7al\u0131\u015fmad\u0131\u011f\u0131 s\u00fcreyi en d\u00fc\u015f\u00fck seviyede tutmay\u0131 sa\u011flar.<\/li><li>Testedilebilirlik: Y\u00fcksek<br>&#8211; Eklenti mod\u00fclleri izole bir \u015fekilde test edilebilir hatta bu mod\u00fcller \u00e7ekirdek sistem taraf\u0131ndan kolayl\u0131kla mock\u2019lanabilir. Bu sayede \u00e7ekirdek sistemde herhangi bir de\u011fi\u015fiklik yapmadan yeni \u00f6zellikler denenebilir.<\/li><li>Performans: Y\u00fcksek<br>&#8211; Mikrokernel mimarisi \u00fczerine in\u015faa edilmi\u015f uygulamalar iyi performans g\u00f6sterir. Bunun nedeni ise uygulaman\u0131n sadece ihtiya\u00e7 duyulan \u00f6zellikleri i\u00e7erecek \u015fekilde \u00f6zelle\u015ftirilebilmesidir.<\/li><li>\u00d6l\u00e7eklenebilirlik: D\u00fc\u015f\u00fck<br>&#8211; \u00c7o\u011funlukla bu mimari, \u00fcr\u00fcn temelli ve k\u00fc\u00e7\u00fck uygulamalarda kullan\u0131l\u0131r. Bu mimari tek bir par\u00e7a halinde implement edildi\u011fi i\u00e7in \u00f6l\u00e7eklendirilmesi d\u00fc\u015f\u00fck seviyededir.<\/li><li>Geli\u015ftirme kolayl\u0131\u011f\u0131: D\u00fc\u015f\u00fck<br>&#8211; Bu mimari detayl\u0131 bir dizayn ve kontrat y\u00f6netimi gerektirir. Bu durum da implementasyonu kar\u0131\u015f\u0131k bir hale sokar. Kontrat versiyonlamas\u0131, i\u00e7 eklenti kitapl\u0131\u011f\u0131 ve eklentilerin birden fazla y\u00f6ntem ile ba\u011flanabilir olmas\u0131 bu mimariyi kar\u0131\u015f\u0131k bir hale getirmektedir.<\/li><\/ul>\n\n\n\n<p id=\"4132\">Yaz\u0131m\u0131n devam\u0131nda&nbsp;<a href=\"https:\/\/medium.com\/p\/9037ba3bcf91\">Mikroservis Mimarisinden (Microservices Architecture)<\/a>&nbsp;bahsedece\u011fim.<\/p>\n\n\n\n<p id=\"5157\">Kaynak\u00e7a: Software Architecture Patterns \u2014 Mark Richards<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mikrokernel Architecture Bu mimari, \u00fcr\u00fcn bazl\u0131 uygulamalarda yayg\u0131n bir \u015fekilde kullan\u0131l\u0131r. Bunun d\u0131\u015f\u0131nda eklenti mimarisi (plug-in architecture) olarak da bilinir. \u00dcr\u00fcn bazl\u0131 uygulamalar, farkl\u0131 versiyonlar\u0131 olan ve bir paket olarak indirilebilir haldedir. Bu mimari, \u00fc\u00e7\u00fcnc\u00fc parti \u00fcr\u00fcnlerde g\u00f6r\u00fclmesine ra\u011fmen baz\u0131 firmalar \u015firket i\u00e7i uygulamalar\u0131n\u0131, uygulamaya eklenebilir yeni \u00f6zellikler geli\u015ftirip s\u00fcr\u00fcm notlar\u0131yla birlikte bunlar\u0131 yay\u0131nlarlar. Ana\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.firatyasar.com\/?p=158\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":148,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/158"}],"collection":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=158"}],"version-history":[{"count":1,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":159,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/158\/revisions\/159"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}