{"id":10948,"date":"2015-04-03T13:15:11","date_gmt":"2015-04-03T17:15:11","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=10948"},"modified":"2015-04-06T16:02:38","modified_gmt":"2015-04-06T20:02:38","slug":"model-widget-controller-mwc-a-k-a-apple-mvc-is-not-mvc","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2015\/04\/03\/model-widget-controller-mwc-a-k-a-apple-mvc-is-not-mvc\/","title":{"rendered":"Model Widget Controller (MWC) a.k.a.: Apple &ldquo;MVC&rdquo; Is Not MVC"},"content":{"rendered":"<p><a href=\"http:\/\/blog.metaobject.com\/2015\/04\/model-widget-controller-mwc-aka-apple.html\">Marcel Weiher<\/a> (<a href=\"https:\/\/twitter.com\/mpweiher\/status\/583974031994552321\">tweet<\/a>, <a href=\"https:\/\/news.ycombinator.com\/item?id=9315518\">comments<\/a>):<\/p>\n<blockquote cite=\"http:\/\/blog.metaobject.com\/2015\/04\/model-widget-controller-mwc-aka-apple.html\"><p>As far as I can tell, this architectural style comes from having \nself-contained widgets that encapsulate very small pieces of information such as simple strings, booleans\nor numbers.  The MVC architecture was not intended for these kinds of small widgets [&#8230;]<\/p><p>With a widget, there is no complex model, not filtering being done by the view. The widget contains its own data, for example a string or a number. An advantage of widgets is that you can meaningfully assemble them in a tool like Interface Builder, with a more MVC-like large view, all you have in IB is a large blank space labeled &lsquo;Custom View&rsquo;. On the other hand, I&rsquo;ve had very good experiences with &ldquo;real&rdquo; (large view) MVC in creating high performance, highly responsive user interfaces.<\/p><\/blockquote>\n<p>Update (2015-04-06): <a href=\"http:\/\/martinfowler.com\/eaaDev\/uiArchs.html\">Martin Fowler<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=9323749\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"http:\/\/martinfowler.com\/eaaDev\/uiArchs.html\"><p>Probably the widest quoted pattern in UI development is Model View Controller (MVC) - it&rsquo;s also the most misquoted. I&rsquo;ve lost count of the times I&rsquo;ve seen something described as MVC which turned out to be nothing like it. Frankly a lot of the reason for this is that parts of classic MVC don&rsquo;t really make sense for rich clients these days.<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Marcel Weiher (tweet, comments): As far as I can tell, this architectural style comes from having self-contained widgets that encapsulate very small pieces of information such as simple strings, booleans or numbers. The MVC architecture was not intended for these kinds of small widgets [&#8230;]With a widget, there is no complex model, not filtering being [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[69,31,30,374,71,341],"class_list":["post-10948","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-cocoa","tag-ios","tag-mac","tag-mvc","tag-programming","tag-reactivecocoa"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/10948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=10948"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/10948\/revisions"}],"predecessor-version":[{"id":10984,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/10948\/revisions\/10984"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=10948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=10948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=10948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}