{"id":12704,"date":"2020-09-16T11:49:02","date_gmt":"2020-09-16T08:49:02","guid":{"rendered":"https:\/\/itsm.com\/?p=12704"},"modified":"2024-09-23T11:55:44","modified_gmt":"2024-09-23T08:55:44","slug":"mv-patterny-v-razrabotke-veb-prilozheniya-2","status":"publish","type":"post","link":"https:\/\/itsm.com\/tr\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/","title":{"rendered":"Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri"},"content":{"rendered":"<p>MV* kal\u0131plar\u0131 olmadan yaz\u0131lan karma\u015f\u0131k uygulama kodunun test edilmesi, yeniden kullan\u0131lmas\u0131 ve bak\u0131m\u0131 zordur. Kal\u0131plar G\u00f6r\u00fcn\u00fcm, Model ve Denetleyici aras\u0131ndaki ba\u011flant\u0131y\u0131 ortadan kald\u0131r\u0131r veya zay\u0131flat\u0131r, kodu ay\u0131r\u0131r ve geli\u015ftirmeyi basitle\u015ftirir. MV* kal\u0131plar\u0131n\u0131n t\u00fcrlerini ve SimpleOne&#8217;daki kullan\u0131mlar\u0131n\u0131 ele alaca\u011f\u0131z.<\/p>\n<p>Bir SimpleOne uygulamas\u0131 geli\u015ftirirken, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) dikkatlice tasarlar ve m\u00fc\u015fterilerimizin platformu kullanmas\u0131n\u0131 kolay ve rahat hale getirmek i\u00e7in kullan\u0131c\u0131 deneyimini (UX) tasarlar\u0131z. Ancak kullan\u0131c\u0131 aray\u00fcz\u00fc, kullan\u0131c\u0131 (Kullan\u0131c\u0131) taraf\u0131ndan g\u00f6r\u00fclen buzda\u011f\u0131n\u0131n yaln\u0131zca g\u00f6r\u00fcnen k\u0131sm\u0131d\u0131r. D\u00fc\u011fmelerin ve alanlar\u0131n arkas\u0131nda \u00f6l\u00e7eklenebilir, bak\u0131m\u0131 yap\u0131labilir ve g\u00fcvenilir olmas\u0131 gereken kodlar yatar. Bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in geli\u015ftiriciler, UI kodunu, mant\u0131\u011f\u0131 ve veri i\u015flemeyi ay\u0131rmak i\u00e7in kullan\u0131lan MV* kal\u0131plar\u0131n\u0131 uygular.<\/p>\n<h2>Desenler olmadan kullan\u0131c\u0131 aray\u00fcz\u00fc<\/h2>\n<p>\u00c7e\u015fitli \u00f6\u011feler ve widget&#8217;lar i\u00e7eren bir forma sahip bir uygulama hayal edelim. Bu formun kodu hem mant\u0131\u011f\u0131n a\u00e7\u0131klamas\u0131n\u0131 hem de kullan\u0131c\u0131 aray\u00fcz\u00fc \u00f6\u011felerinin kodunu i\u00e7erir ve ayr\u0131ca veri i\u015fleme i\u00e7in par\u00e7alar da i\u00e7erebilir. Basit bir uygulama i\u00e7in, bu programlama ilkesini desteklemek bir sorun de\u011fildir. Her an kar\u015f\u0131l\u0131kl\u0131 ili\u015fkileri bulabilir ve b\u00fct\u00fcnl\u00fc\u011f\u00fc bozmadan de\u011fi\u015fiklikler yapabilirsiniz. Uygulama daha karma\u015f\u0131k hale geldi\u011finde, kal\u0131plar olmadan yaz\u0131lm\u0131\u015f bir aray\u00fcz\u00fc desteklemek sorun haline gelir.<\/p>\n<p>Sorun, tek sorumluluk ilkesinin ihlal edilmesinden kaynaklanmaktad\u0131r (<a href=\"http:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">single responsibility principle<\/a>) &#8211; &#8220;Bir s\u0131n\u0131f\u0131n de\u011fi\u015fmesi i\u00e7in yaln\u0131zca bir nedeni olmal\u0131d\u0131r&#8221;. Hem kullan\u0131c\u0131 aray\u00fcz\u00fc kodu (View), hem mant\u0131k (Controller), hem de veri i\u015fleme (Model) bir aray\u00fczde topland\u0131\u011f\u0131ndan, de\u011fi\u015ftirmek i\u00e7in birden fazla nedenimiz vard\u0131r. Bir bile\u015fenin kodunu de\u011fi\u015ftirdi\u011fimizde, di\u011fer bile\u015fenleri de de\u011fi\u015ftirmemiz gerekir. Bu durum uygulama deste\u011fini zorla\u015ft\u0131r\u0131r, otomatik test yapmak neredeyse imkans\u0131zd\u0131r ve kodun yeniden kullan\u0131m\u0131 \u00e7ok s\u0131n\u0131rl\u0131d\u0131r.<\/p>\n<p>Bu nedenle kal\u0131plar\u0131 kullanmak uygun ve do\u011frudur &#8211; UI kodunu (View), mant\u0131k kodunu (Presenter, Controller, ViewModel ve di\u011ferleri) ve veri i\u015fleme kodunu (Model) ay\u0131r\u0131rlar. Kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc de\u011fi\u015ftirmeden mant\u0131\u011f\u0131 kolayca de\u011fi\u015ftirebilir veya yaln\u0131zca veri i\u015fleme rutinlerinde de\u011fi\u015fiklik yapabiliriz. Her bir model di\u011ferlerinden ba\u011f\u0131ms\u0131z olarak test edilebilir ve ba\u015fka uygulamalarda da kullan\u0131labilir.<\/p>\n<p>En yayg\u0131n kullan\u0131lan modeller <a href=\"https:\/\/itsm.com\/tr\/glossary\/mvc\/\">Model-View-Controller<\/a>, <a href=\"https:\/\/itsm.com\/tr\/glossary\/mvp\/\">Model-View-Presenter<\/a> ve <a href=\"https:\/\/itsm.com\/tr\/glossary\/mvvm\/\">Model-View-View-Model<\/a>&#8216;dir. \u015eimdi bunlar\u0131n nas\u0131l farkl\u0131la\u015ft\u0131\u011f\u0131na ve nerede uyguland\u0131klar\u0131na bir g\u00f6z atal\u0131m.<\/p>\n<h2>Model ve G\u00f6r\u00fcn\u00fcm<\/h2>\n<p>S\u00f6z konusu \u00fc\u00e7 modelin de tekrar eden iki bile\u015feni vard\u0131r. \u00d6zellikleri farkl\u0131d\u0131r, ancak \u00f6z\u00fcnde ayn\u0131d\u0131rlar.<\/p>\n<p>G\u00f6r\u00fcn\u00fcm g\u00f6rsel bir aray\u00fczd\u00fcr (UI). Tek tek \u00f6\u011felerden veya widget&#8217;lardan olu\u015fabilir. G\u00f6r\u00fcn\u00fcm \u00f6rnekleri MFC ve WinForms&#8217;ta form olu\u015fturma kodu, ASP.NET&#8217;te html, WPF ve Silverlight&#8217;ta XAML&#8217;dir.<\/p>\n<p>Model, aray\u00fcz kullan\u0131larak g\u00f6r\u00fcnt\u00fclenen uygulama verileri ve bunlar\u0131 alma ve kaydetme i\u015flemidir.<\/p>\n<h2>Model-View-Controller<\/h2>\n<p>Smalltalk&#8217;ta uygulama geli\u015ftirmek i\u00e7in 1979 y\u0131l\u0131nda geli\u015ftirilen en eski model. O zamanlar standart \u00f6\u011feleriyle birlikte Windows grafik kabu\u011fu yoktu. Aray\u00fcz manuel olarak kodla olu\u015fturuluyordu. Ancak, o zaman bile g\u00f6r\u00fcnt\u00fc, mant\u0131k ve veri kodunun ayr\u0131lmas\u0131 geli\u015ftirmede bir devrimdi.<\/p>\n<p>Bu modelde \u00fc\u00e7 ana unsur g\u00f6r\u00fcyoruz:<\/p>\n<ul>\n<li>Model &#8211; uygulama verileri ile bunlar\u0131 alma ve kaydetme mant\u0131\u011f\u0131. \u00c7o\u011fu zaman model, bir veritaban\u0131ndan gelen verilerle veya web hizmetlerinin sonu\u00e7lar\u0131yla \u00e7al\u0131\u015f\u0131r. Veriler ya hemen ekranda g\u00f6r\u00fcnt\u00fclenir ya da uyarlan\u0131r.<\/li>\n<li>View &#8211; g\u00f6rsel aray\u00fcz, d\u00fc\u011fmeleri, etiketleri, giri\u015f alanlar\u0131n\u0131 ve di\u011fer form \u00f6\u011felerini olu\u015fturma. Modeli takip edebilir ve ondan veri g\u00f6r\u00fcnt\u00fcleyebilir.<\/li>\n<li>\n<li>Controller &#8211; kullan\u0131c\u0131 eylemlerini (klavye d\u00fc\u011fmeleri veya fare hareketleri) izler, bunlarla ne yap\u0131laca\u011f\u0131na karar verir ve Model ve G\u00f6r\u00fcn\u00fcm\u00fc g\u00fcnceller.<\/li>\n<\/li>\n<\/ul>\n<p>MVC modelinin prensibini a\u015fa\u011f\u0131daki gibi a\u00e7\u0131klayal\u0131m. Denetleyici kullan\u0131c\u0131 eylemlerini i\u015fler &#8211; fare t\u0131klamalar\u0131, klavyeye basmalar veya gelen http istekleri. \u0130\u015flenen de\u011fi\u015fiklikler Controller taraf\u0131ndan Model&#8217;e aktar\u0131l\u0131r ve View \u00fczerinde \u00e7izilir (pasif mod) ya da Model de\u011fi\u015fiklikleri do\u011frudan View&#8217;dan al\u0131r (aktif mod). View&#8217;un ana g\u00f6revi, Controller&#8217;\u0131 kullanarak Model&#8217;den gelen verileri render etmektir.<\/p>\n<h2>Model-View-Presenter<\/h2>\n<p>G\u00f6rsel programlama ve widget&#8217;lar\u0131n geli\u015ftirilmesi, tek tek View \u00f6\u011felerinin olu\u015fturulmas\u0131n\u0131 ortadan kald\u0131rm\u0131\u015ft\u0131r, bu nedenle art\u0131k ayr\u0131 bir Denetleyici s\u0131n\u0131f\u0131na gerek yoktur. \u00d6\u011feler, kullan\u0131c\u0131n\u0131n kendileriyle hangi eylemleri ger\u00e7ekle\u015ftirdi\u011fini bilir. Ancak uygulama mant\u0131\u011f\u0131n\u0131 verilerden ay\u0131rmak hala gereklidir. B\u00f6ylece, kal\u0131p Controller yerine Presenter ile de\u011fi\u015ftirildi.<\/p>\n<p>MVC ile kar\u015f\u0131la\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, Model i\u015flevi de\u011fi\u015fmedi, View art\u0131k kullan\u0131c\u0131 eylemlerini (\u00f6rne\u011fin widget&#8217;lar\u0131 kullanarak) i\u015fliyor ve bu eylem aray\u00fcz mant\u0131\u011f\u0131nda bir \u015feyi de\u011fi\u015ftirirse, Presenter&#8217;a aktar\u0131l\u0131yor.<\/p>\n<p>Bu kal\u0131b\u0131n ana g\u00f6revi, de\u011fi\u015ftirilebilir G\u00f6r\u00fcn\u00fcmler ger\u00e7ekle\u015ftirmek ve bunlar\u0131 ba\u011f\u0131ms\u0131z olarak test edebilmek i\u00e7in G\u00f6r\u00fcn\u00fcm&#8217;\u00fc Denetleyici&#8217;den ay\u0131rmakt\u0131r.<\/p>\n<p>Bir iletken olarak Presenter, Model ve View&#8217;un senkronize \u00e7al\u0131\u015fmas\u0131ndan sorumludur. Bir kullan\u0131c\u0131 eylemi hakk\u0131nda View&#8217;dan bir bildirim al\u0131rsa, modeli g\u00fcnceller ve de\u011fi\u015fiklikleri View ile senkronize eder. T\u00fcm ileti\u015fim aray\u00fcz arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015fir, bu da onlara ayr\u0131l\u0131k sa\u011flar.<\/p>\n<p>MVC&#8217;nin iki uygulamas\u0131 vard\u0131r: G\u00f6r\u00fcn\u00fcm\u00fcn Model hakk\u0131nda hi\u00e7bir \u015fey bilmedi\u011fi ve Sunucunun Modelden bilgi almak ve G\u00f6r\u00fcn\u00fcm\u00fc g\u00fcncellemekten sorumlu oldu\u011fu Pasif G\u00f6r\u00fcn\u00fcm ve G\u00f6r\u00fcn\u00fcm\u00fcn Model hakk\u0131nda bilgi sahibi oldu\u011fu ve verileri ekran\u0131n kendisine ba\u011flad\u0131\u011f\u0131 Denetleyici Denetleyici.<\/p>\n<h2>Model-View-View-ViewModel<\/h2>\n<p>Bu model ile di\u011ferleri aras\u0131ndaki en \u00f6nemli fark, WPF ve Silverlight&#8217;ta veri ba\u011flama \u00f6zelli\u011finin bulunmas\u0131d\u0131r.<\/p>\n<p>Burada ViewModel ve View aras\u0131nda do\u011frudan bir ileti\u015fim yoktur, \u00f6zellikler ve y\u00f6ntemlerden olu\u015fan komutlar (ba\u011flama) arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Do\u011fru \u00f6zelliklere sahip oldu\u011funuz s\u00fcrece herhangi bir View ve ViewModel&#8217;i bu \u015fekilde ba\u011flayabilirsiniz. XAML ba\u011flama ayr\u0131ca View&#8217;e yaln\u0131zca verileri de\u011fil eylemleri de ba\u011flaman\u0131za olanak tan\u0131r. Bir nesneyi Model \u00f6zelli\u011fi olarak tan\u0131mlar\u0131z ve bildirimsel olarak View&#8217;daki ilgili \u00f6zelli\u011fe ba\u011flar\u0131z. \u00c7\u0131kt\u0131, View&#8217;dan ba\u011f\u0131ms\u0131z olarak hem veri hem de davran\u0131\u015f i\u00e7eren ayr\u0131 bir nesnedir. ViewModel, Model ve Controller&#8217;\u0131n bir kombinasyonudur.<\/p>\n<p>MVVM&#8217;nin ba\u015fl\u0131ca avantajlar\u0131 kolay aray\u00fcz tasar\u0131m\u0131, ba\u011f\u0131ms\u0131z test ve View i\u00e7in azalt\u0131lm\u0131\u015f koddur.<\/p>\n<h2>Optimizasyon ve performans<\/h2>\n<p>G\u00f6r\u00fcn\u00fcm, Model ve Denetleyici kodunu ay\u0131rmak i\u00e7in MV* kal\u0131plar\u0131n\u0131 kullan\u0131rsak, y\u00fcksek y\u00fckl\u00fc sistemlerde, bu \u00f6\u011feleri farkl\u0131 hesaplama birimlerine ay\u0131rarak ek bir fayda elde edilebilir.<\/p>\n<ol>\n<li>G\u00f6r\u00fcnt\u00fc istemci cihaz\u0131na (diz\u00fcst\u00fc bilgisayar, PC, ak\u0131ll\u0131 telefon) getirilir. SPA tek sayfa uygulama teknolojisi h\u0131zland\u0131rma i\u015fleminden sorumludur. Karma\u015f\u0131k hesaplamalar kullan\u0131c\u0131n\u0131n u\u00e7 noktas\u0131nda ger\u00e7ekle\u015ftirilir, b\u00f6ylece arka u\u00e7 sunucular \u00fczerindeki y\u00fck azalt\u0131l\u0131r.\n<li>Controller (Presenter, ViewModel), mant\u0131\u011f\u0131 i\u015fleyen ayr\u0131 bir arka u\u00e7 sunucusuna ta\u015f\u0131n\u0131r.<\/li>\n<li>Model en hacimli ve \u00fcretken unsurdur, bu nedenle h\u0131zl\u0131 bir veri depolama sistemine ve tercihen RAM&#8217;de &#8220;s\u0131cak&#8221; bilgileri \u00f6nbelle\u011fe alma yetene\u011fine sahip bir sunucu gerektirir.<\/li>\n<\/li>\n<\/ol>\n<h2>SimpleOne&#8217;da MVC<\/h2>\n<p><a href=\"https:\/\/itsm.com\/tr\/products\/itsm\/\">ITSM-system SimpleOne<\/a> geli\u015ftirilirken, Model-View-Controller modeli temel al\u0131n\u0131r ve bu model \u00f6nemli \u00f6l\u00e7\u00fcde optimize edilir. G\u00f6r\u00fcn\u00fcm rol\u00fc, tamamen istemci cihazda \u00e7al\u0131\u015fan ve yaln\u0131zca Model&#8217;den veri alan tek sayfal\u0131k bir SPA uygulamas\u0131 taraf\u0131ndan oynan\u0131r. Modelin \u00e7al\u0131\u015fmas\u0131 i\u00e7in DDD yakla\u015f\u0131m\u0131n\u0131 kullan\u0131yoruz (<a href=\"https:\/\/itsm.com\/tr\/glossary\/domain-driven-design\/\">Domain-Driven Design<\/a>) &#8211; \u00f6r\u00fcnt\u00fcy\u00fc verilere eri\u015filen katmanlara (depolara) ay\u0131r\u0131yoruz.<\/p>\n<p>Geleneksel MVC&#8217;de Model kodu, PostgreSQL gibi belirli bir veritaban\u0131 ve s\u00f6zdizimi i\u00e7in tasarlanm\u0131\u015ft\u0131r. Depo sistemini kullanarak, uygulama kodunu de\u011fi\u015ftirmeden katmanlar\u0131 de\u011fi\u015ftirebilir ve ba\u015fka herhangi bir veritaban\u0131na ba\u011flanabiliriz.<\/p>\n<p>Katmanlar sadece veritaban\u0131na ba\u011flay\u0131c\u0131lar olarak depolarla \u00e7al\u0131\u015fmam\u0131za de\u011fil, ayn\u0131 zamanda herhangi bir s\u0131n\u0131f\u0131 ayr\u0131 varl\u0131klara b\u00f6lmemize de olanak tan\u0131r. \u00d6rne\u011fin, normal bir MVC Modelinde Kullan\u0131c\u0131 s\u0131n\u0131f\u0131 birka\u00e7 bin sat\u0131r kod i\u00e7eriyorsa ve kullan\u0131c\u0131yla ilgili t\u00fcm i\u015flemlerden (arama, silme, mesaj g\u00f6nderme ve di\u011ferleri) sorumluysa, SimpleOne&#8217;da bunu birka\u00e7 ayr\u0131 katmana ay\u0131r\u0131r\u0131z: kullan\u0131c\u0131 tan\u0131m\u0131 s\u0131n\u0131f\u0131, veritaban\u0131yla \u00e7al\u0131\u015fmak i\u00e7in kullan\u0131c\u0131 deposu, kullan\u0131c\u0131yla ilgili \u00e7e\u015fitli hizmetlerin s\u0131n\u0131flar\u0131 ve di\u011ferleri. Bir MVC \u00e7er\u00e7evesi elde ediyoruz, ancak daha derinlemesine geli\u015ftirilmi\u015f, de\u011fi\u015ftirmeye izin veren, \u00e7ok daha h\u0131zl\u0131 sorgu y\u00fcr\u00fctme ve daha s\u00fcrd\u00fcr\u00fclebilir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Kal\u0131plar, m\u00fckemmel bir kod organizasyonu olu\u015fturmak i\u00e7in takip edilmesi gereken kat\u0131 paradigmalar de\u011fildir. \u00c7ok \u00f6nemli sorunlar\u0131 \u00e7\u00f6zerler &#8211; G\u00f6r\u00fcn\u00fcm, Model ve Denetleyici aras\u0131ndaki ba\u011flant\u0131lar\u0131 zay\u0131flatmak (ortadan kald\u0131rmak) ve kullan\u0131c\u0131 aray\u00fcz\u00fc geli\u015ftirmenin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 azaltmak. Bu yakla\u015f\u0131m\u0131n ger\u00e7ekle\u015ftirilmesi, ara ba\u011flant\u0131lar\u0131n \u00f6z\u00fcn\u00fc anlaman\u0131z ve her bir projede bunlar\u0131n ortadan kald\u0131r\u0131lma olas\u0131l\u0131\u011f\u0131n\u0131 araman\u0131z halinde m\u00fcmk\u00fcnd\u00fcr. <a href=\"https:\/\/itsm.com\/tr\/platform\/\">ESM sistemi SimpleOne<\/a> karma\u015f\u0131k ve geli\u015ftirme a\u00e7\u0131s\u0131ndan a\u011f\u0131r bir platform olmas\u0131na ra\u011fmen kullan\u0131c\u0131 dostu bir aray\u00fcz sunar ve a\u011f\u0131r y\u00fcklerin \u00fcstesinden gelebilir. Bu verimlilik, MV* kal\u0131plar\u0131n\u0131n kullan\u0131m\u0131 da dahil olmak \u00fczere modern teknolojilerin ve geli\u015ftirme y\u00f6ntemlerinin kullan\u0131lmas\u0131n\u0131n bir sonucudur.<\/p>","protected":false},"excerpt":{"rendered":"<p>MV* kal\u0131plar\u0131 olmadan yaz\u0131lan karma\u015f\u0131k uygulama kodunun test edilmesi, yeniden kullan\u0131lmas\u0131 ve bak\u0131m\u0131 zordur. Kal\u0131plar G\u00f6r\u00fcn\u00fcm, Model ve Denetleyici aras\u0131ndaki ba\u011flant\u0131y\u0131 ortadan kald\u0131r\u0131r veya zay\u0131flat\u0131r, kodu ay\u0131r\u0131r ve geli\u015ftirmeyi basitle\u015ftirir. MV* kal\u0131plar\u0131n\u0131n t\u00fcrlerini ve SimpleOne&#8217;daki kullan\u0131mlar\u0131n\u0131 ele alaca\u011f\u0131z. Bir SimpleOne uygulamas\u0131 geli\u015ftirirken, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) dikkatlice tasarlar ve m\u00fc\u015fterilerimizin platformu kullanmas\u0131n\u0131 kolay ve rahat hale [&hellip;]<\/p>\n","protected":false},"author":48,"featured_media":12705,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[14,16],"yoast_head":"<title>Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri - SimpleOne - Business Process Automation Platform<\/title>\n<meta name=\"description\" content=\"Blog SimpleOne - Business Process Automation Platform Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri - SimpleOne - Business Process Automation Platform\" \/>\n<meta property=\"og:description\" content=\"Blog SimpleOne - Business Process Automation Platform Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/\" \/>\n<meta property=\"og:site_name\" content=\"SimpleOne - Business Process Automation Platform\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-16T08:49:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itsm.com\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png\" \/>\n\t<meta property=\"og:image:width\" content=\"927\" \/>\n\t<meta property=\"og:image:height\" content=\"646\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/itsm.com\/#organization\",\"name\":\"SimpleOne\",\"url\":\"https:\/\/itsm.com\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/itsm.com\/#logo\",\"inLanguage\":\"tr\",\"url\":\"\/wp-content\/uploads\/2023\/11\/main_logo-1.png\",\"contentUrl\":\"\/wp-content\/uploads\/2023\/11\/main_logo-1.png\",\"width\":166,\"height\":23,\"caption\":\"SimpleOne\"},\"image\":{\"@id\":\"https:\/\/itsm.com\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/itsm.com\/#website\",\"url\":\"https:\/\/itsm.com\/\",\"name\":\"SimpleOne - Business Process Automation Platform\",\"description\":\"\u3164\",\"publisher\":{\"@id\":\"https:\/\/itsm.com\/#organization\"},\"inLanguage\":\"tr\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#primaryimage\",\"inLanguage\":\"tr\",\"url\":\"\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png\",\"contentUrl\":\"\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png\",\"width\":927,\"height\":646},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#webpage\",\"url\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/\",\"name\":\"[:en]MV*-patterns in web application development[:pb]Padr\u00f5es MV* no desenvolvimento de aplicativos da Web[:tr]Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri[:ru]MV*-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f[:] - SimpleOne - Business Process Automation Platform\",\"isPartOf\":{\"@id\":\"https:\/\/itsm.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#primaryimage\"},\"datePublished\":\"2020-09-16T08:49:02+00:00\",\"dateModified\":\"2024-09-23T08:55:44+00:00\",\"description\":\"Blog SimpleOne - Business Process Automation Platform [:en]MV*-patterns in web application development[:pb]Padr\u00f5es MV* no desenvolvimento de aplicativos da Web[:tr]Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri[:ru]MV*-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f[:]\",\"breadcrumb\":{\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/itsm.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MV*-patterns in web application development\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#webpage\"},\"author\":{\"@id\":\"https:\/\/itsm.com\/#\/schema\/person\/c7515bc91e745fb07aed438cb94d6358\"},\"headline\":\"Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri\",\"datePublished\":\"2020-09-16T08:49:02+00:00\",\"dateModified\":\"2024-09-23T08:55:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#webpage\"},\"wordCount\":5090,\"publisher\":{\"@id\":\"https:\/\/itsm.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png\",\"keywords\":[\"Geli\u015ftirme Ara\u00e7lar\u0131\",\"Aray\u00fcz\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"tr\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/itsm.com\/#\/schema\/person\/c7515bc91e745fb07aed438cb94d6358\",\"name\":\"lyubov azarenko\",\"url\":\"https:\/\/itsm.com\/tr\/author\/lyubov-azarenko\/\"}]}<\/script>","yoast_head_json":{"title":"[:en]MV*-patterns in web application development[:pb]Padr\u00f5es MV* no desenvolvimento de aplicativos da Web[:tr]Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri[:ru]MV*-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f[:] - SimpleOne - Business Process Automation Platform","description":"Blog SimpleOne - Business Process Automation Platform Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"tr_TR","og_type":"article","og_title":"Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri - SimpleOne - Business Process Automation Platform","og_description":"Blog SimpleOne - Business Process Automation Platform Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri","og_url":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/","og_site_name":"SimpleOne - Business Process Automation Platform","article_published_time":"2020-09-16T08:49:02+00:00","og_image":[{"width":927,"height":646,"url":"https:\/\/itsm.com\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/itsm.com\/#organization","name":"SimpleOne","url":"https:\/\/itsm.com\/","sameAs":[],"logo":{"@type":"ImageObject","@id":"https:\/\/itsm.com\/#logo","inLanguage":"tr","url":"\/wp-content\/uploads\/2023\/11\/main_logo-1.png","contentUrl":"\/wp-content\/uploads\/2023\/11\/main_logo-1.png","width":166,"height":23,"caption":"SimpleOne"},"image":{"@id":"https:\/\/itsm.com\/#logo"}},{"@type":"WebSite","@id":"https:\/\/itsm.com\/#website","url":"https:\/\/itsm.com\/","name":"SimpleOne - Business Process Automation Platform","description":"\u3164","publisher":{"@id":"https:\/\/itsm.com\/#organization"},"inLanguage":"tr"},{"@type":"ImageObject","@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#primaryimage","inLanguage":"tr","url":"\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png","contentUrl":"\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png","width":927,"height":646},{"@type":"WebPage","@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#webpage","url":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/","name":"[:en]MV*-patterns in web application development[:pb]Padr\u00f5es MV* no desenvolvimento de aplicativos da Web[:tr]Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri[:ru]MV*-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f[:] - SimpleOne - Business Process Automation Platform","isPartOf":{"@id":"https:\/\/itsm.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#primaryimage"},"datePublished":"2020-09-16T08:49:02+00:00","dateModified":"2024-09-23T08:55:44+00:00","description":"Blog SimpleOne - Business Process Automation Platform [:en]MV*-patterns in web application development[:pb]Padr\u00f5es MV* no desenvolvimento de aplicativos da Web[:tr]Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri[:ru]MV*-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f[:]","breadcrumb":{"@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/itsm.com\/"},{"@type":"ListItem","position":2,"name":"MV*-patterns in web application development"}]},{"@type":"Article","@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#article","isPartOf":{"@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#webpage"},"author":{"@id":"https:\/\/itsm.com\/#\/schema\/person\/c7515bc91e745fb07aed438cb94d6358"},"headline":"Web uygulamas\u0131 geli\u015ftirmede MV*-paternleri","datePublished":"2020-09-16T08:49:02+00:00","dateModified":"2024-09-23T08:55:44+00:00","mainEntityOfPage":{"@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#webpage"},"wordCount":5090,"publisher":{"@id":"https:\/\/itsm.com\/#organization"},"image":{"@id":"https:\/\/itsm.com\/blog\/mv-patterny-v-razrabotke-veb-prilozheniya-2\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/09\/mv-patterny-v-razrabotke-veb-prilozheniya-oblozhka.png","keywords":["Geli\u015ftirme Ara\u00e7lar\u0131","Aray\u00fcz"],"articleSection":["Blog"],"inLanguage":"tr"},{"@type":"Person","@id":"https:\/\/itsm.com\/#\/schema\/person\/c7515bc91e745fb07aed438cb94d6358","name":"lyubov azarenko","url":"https:\/\/itsm.com\/tr\/author\/lyubov-azarenko\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/posts\/12704"}],"collection":[{"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/comments?post=12704"}],"version-history":[{"count":2,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/posts\/12704\/revisions"}],"predecessor-version":[{"id":12716,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/posts\/12704\/revisions\/12716"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/media\/12705"}],"wp:attachment":[{"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/media?parent=12704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/categories?post=12704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itsm.com\/tr\/wp-json\/wp\/v2\/tags?post=12704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}