{"id":890,"date":"2010-09-02T20:56:00","date_gmt":"2010-09-03T03:56:00","guid":{"rendered":"https:\/\/dubinko.info\/blog\/?p=890"},"modified":"2010-09-02T20:56:00","modified_gmt":"2010-09-03T03:56:00","slug":"is-xforms-really-mvc","status":"publish","type":"post","link":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/","title":{"rendered":"Is XForms really MVC?"},"content":{"rendered":"<p>This <a href=\"http:\/\/www.aspiringcraftsman.com\/2007\/08\/interactive-application-architecture\/\">epic posting<\/a> on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data into the Model.<\/p>\n<p>But with browser forms, input and output are tightly intermingled. The View takes care of input and output. Something else has primary responsibility for mediating the data flow to and from the model&#8211;and that something has been called a Presenter. This yields the MVP pattern.<\/p>\n<p>The terminology gets confusing quickly, but roughly<\/p>\n<p>XForms Instance == MVP Model<\/p>\n<p>XForms Model == MVP Presenter<\/p>\n<p>XForms User Interface == MVP View<\/p>\n<p>It&#8217;s not wrong to associate XForms with MVC&#8211;the term has become so blurry that it&#8217;s easy to lump variants like MVP into the same bucket. But to the extent that it makes sense to talk about more specific patterns, maybe we should be calling the XForms design pattern MVP instead of MVC. Comments? Criticism? Fire away below. -m<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[6,27,3,22,1,13],"tags":[146,503,901,1019,1022,1020,1021,52,1157],"class_list":["post-890","post","type-post","status-publish","format-standard","hentry","category-intentional-web","category-languages","category-patternalia","category-software","category-stuff","category-xforms","tag-design","tag-model","tag-mvc","tag-mvp","tag-oo","tag-pattern","tag-view","tag-web","tag-xforms"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"mdubinko\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"MicahLogic Queryopticon | Yields undecidable when preceded by its quotation\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Is XForms really MVC? | MicahLogic Queryopticon\" \/>\n\t\t<meta property=\"og:description\" content=\"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2010-09-03T03:56:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2010-09-03T03:56:00+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Is XForms really MVC? | MicahLogic Queryopticon\" \/>\n\t\t<meta name=\"twitter:description\" content=\"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#article\",\"name\":\"Is XForms really MVC? | MicahLogic Queryopticon\",\"headline\":\"Is XForms really MVC?\",\"author\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\"},\"datePublished\":\"2010-09-02T20:56:00-07:00\",\"dateModified\":\"2010-09-02T20:56:00-07:00\",\"inLanguage\":\"en-US\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#webpage\"},\"articleSection\":\"intentional web, languages, patternalia, software, stuff, XForms, design, model, mvc, mvp, oo, pattern, view, web, XForms\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/#listItem\",\"name\":\"standards\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/#listItem\",\"position\":2,\"name\":\"standards\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/xforms\\\/#listItem\",\"name\":\"XForms\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/xforms\\\/#listItem\",\"position\":3,\"name\":\"XForms\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/xforms\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#listItem\",\"name\":\"Is XForms really MVC?\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/#listItem\",\"name\":\"standards\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#listItem\",\"position\":4,\"name\":\"Is XForms really MVC?\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/standards\\\/xforms\\\/#listItem\",\"name\":\"XForms\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\",\"name\":\"MicahLogic Queryopticon\",\"description\":\"Yields undecidable when preceded by its quotation\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"mdubinko\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c1160c0ab9ce581a55013f96fd61356e166ffc9a00666a5062bc8121922fcdcd?s=96&d=retro&r=g\",\"width\":96,\"height\":96,\"caption\":\"mdubinko\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#webpage\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/\",\"name\":\"Is XForms really MVC? | MicahLogic Queryopticon\",\"description\":\"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2010\\\/09\\\/is-xforms-really-mvc\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2010-09-02T20:56:00-07:00\",\"dateModified\":\"2010-09-02T20:56:00-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/\",\"name\":\"MicahLogic Queryopticon\",\"description\":\"Yields undecidable when preceded by its quotation\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Is XForms really MVC? | MicahLogic Queryopticon","description":"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data","canonical_url":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#article","name":"Is XForms really MVC? | MicahLogic Queryopticon","headline":"Is XForms really MVC?","author":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/dubinko.info\/blog\/#organization"},"datePublished":"2010-09-02T20:56:00-07:00","dateModified":"2010-09-02T20:56:00-07:00","inLanguage":"en-US","commentCount":2,"mainEntityOfPage":{"@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#webpage"},"isPartOf":{"@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#webpage"},"articleSection":"intentional web, languages, patternalia, software, stuff, XForms, design, model, mvc, mvp, oo, pattern, view, web, XForms"},{"@type":"BreadcrumbList","@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog#listItem","position":1,"name":"Home","item":"https:\/\/dubinko.info\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/standards\/#listItem","name":"standards"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/standards\/#listItem","position":2,"name":"standards","item":"https:\/\/dubinko.info\/blog\/tags\/standards\/","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/standards\/xforms\/#listItem","name":"XForms"},"previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/standards\/xforms\/#listItem","position":3,"name":"XForms","item":"https:\/\/dubinko.info\/blog\/tags\/standards\/xforms\/","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#listItem","name":"Is XForms really MVC?"},"previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/standards\/#listItem","name":"standards"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#listItem","position":4,"name":"Is XForms really MVC?","previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/standards\/xforms\/#listItem","name":"XForms"}}]},{"@type":"Organization","@id":"https:\/\/dubinko.info\/blog\/#organization","name":"MicahLogic Queryopticon","description":"Yields undecidable when preceded by its quotation","url":"https:\/\/dubinko.info\/blog\/"},{"@type":"Person","@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author","url":"https:\/\/dubinko.info\/blog\/author\/admin\/","name":"mdubinko","image":{"@type":"ImageObject","@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/c1160c0ab9ce581a55013f96fd61356e166ffc9a00666a5062bc8121922fcdcd?s=96&d=retro&r=g","width":96,"height":96,"caption":"mdubinko"}},{"@type":"WebPage","@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#webpage","url":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/","name":"Is XForms really MVC? | MicahLogic Queryopticon","description":"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/dubinko.info\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/#breadcrumblist"},"author":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"datePublished":"2010-09-02T20:56:00-07:00","dateModified":"2010-09-02T20:56:00-07:00"},{"@type":"WebSite","@id":"https:\/\/dubinko.info\/blog\/#website","url":"https:\/\/dubinko.info\/blog\/","name":"MicahLogic Queryopticon","description":"Yields undecidable when preceded by its quotation","inLanguage":"en-US","publisher":{"@id":"https:\/\/dubinko.info\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"MicahLogic Queryopticon | Yields undecidable when preceded by its quotation","og:type":"article","og:title":"Is XForms really MVC? | MicahLogic Queryopticon","og:description":"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data","og:url":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/","article:published_time":"2010-09-03T03:56:00+00:00","article:modified_time":"2010-09-03T03:56:00+00:00","twitter:card":"summary","twitter:title":"Is XForms really MVC? | MicahLogic Queryopticon","twitter:description":"This epic posting on MVC helped me better understand the pattern, and all the variants that have flowed outward from the original design. One interesting observation is that the earlier designs used Views primarily as output-only, and Controllers primarily as input-only, and as a consequence the Controller was the one true path for getting data"},"aioseo_meta_data":{"post_id":"890","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-02-04 08:04:16","updated":"2025-12-10 03:37:01","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\/tags\/standards\/\" title=\"standards\">standards<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\/tags\/standards\/xforms\/\" title=\"XForms\">XForms<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tIs XForms really MVC?\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/dubinko.info\/blog"},{"label":"standards","link":"https:\/\/dubinko.info\/blog\/tags\/standards\/"},{"label":"XForms","link":"https:\/\/dubinko.info\/blog\/tags\/standards\/xforms\/"},{"label":"Is XForms really MVC?","link":"https:\/\/dubinko.info\/blog\/2010\/09\/is-xforms-really-mvc\/"}],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8eo8l-em","jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/comments?post=890"}],"version-history":[{"count":2,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/890\/revisions"}],"predecessor-version":[{"id":892,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/890\/revisions\/892"}],"wp:attachment":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/media?parent=890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/categories?post=890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/tags?post=890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}