{"id":1328,"date":"2012-11-01T08:45:33","date_gmt":"2012-10-31T22:45:33","guid":{"rendered":"http:\/\/www.malcolmgroves.com\/blog\/?p=1328"},"modified":"2013-09-12T21:41:39","modified_gmt":"2013-09-12T11:41:39","slug":"an-introduction-to-model-view-viewmodel-mvvm-in-delphi","status":"publish","type":"post","link":"http:\/\/www.malcolmgroves.com\/blog\/?p=1328","title":{"rendered":"An Introduction to Model-View-ViewModel (MVVM) in Delphi"},"content":{"rendered":"<p><a href=\"http:\/\/www.embarcadero.com\/coderage\" target=\"_blank\">CodeRage 7<\/a> is on next week and I&#8217;ll be doing a session introducing MVVM and how to implement it in Delphi. If you&#8217;re not aware of MVVM, it&#8217;s a Presentation Pattern, a way to structure your applications so that you maximize the amount of code in your app that can be unit tested (including your form logic) while at the same time, simplifying the task of swapping out different UI&#8217;s in front of your app (eg. to have different forms for different platforms or devices). It leverages Data Binding, in my case, <a href=\"http:\/\/www.malcolmgroves.com\/blog\/?tag=livebindings\">LiveBindings in XE3<\/a>.<\/p>\n<p>I have a series of deeper dive articles planned on different areas of MVVM in Delphi, and this session will serve as the starting point.<\/p>\n<p>Session details are <a href=\"http:\/\/mgrov.es\/bi\" target=\"_blank\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Information about my CodeRage 7 session on implementing MVVM in Delphi.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97,116,90],"tags":[19,89,117],"class_list":["post-1328","post","type-post","status-publish","format-standard","hentry","category-architecture","category-livebindings","category-mvvm","tag-delphi","tag-livebindings","tag-mvvm"],"_links":{"self":[{"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1328"}],"version-history":[{"count":10,"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1328\/revisions"}],"predecessor-version":[{"id":1450,"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1328\/revisions\/1450"}],"wp:attachment":[{"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1328"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.malcolmgroves.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}