{"id":263,"date":"2020-01-28T10:30:00","date_gmt":"2020-01-28T09:30:00","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/front-end-development-with-angular-ngrx\/"},"modified":"2021-12-23T15:19:59","modified_gmt":"2021-12-23T14:19:59","slug":"front-end-development-with-angular-ngrx","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/","title":{"rendered":"Front-end development with Angular &#038; NgRx"},"content":{"rendered":"\n<p><span class=\"firstcharacter\">F<\/span>ront-end development of web applications has always been challenging and never settles on established technologies for too long.<br>In the last few years, the Single Page Application (SPA) paradigm has been widely adopted to build complex front-end business logic that emulate the behaviour of native desktop applications.<\/p>\n\n\n\n<p>As a consequence, several SPA oriented frameworks appeared on the layered and already crowded panorama of front-end development methodologies.<br>At <a href=\"https:\/\/milan2018.codemotionworld.com\/conference\/\">Codemotion Milan 2018<\/a>, Fabio Biondi, freelance web developer, talked about the Angular framework and its NgRx extension based on the Redux design, which qualifies as one of the state-of-the-art technologies to manage complex front-end logic in web applications.<br>Angular is one of the most popular SPA frameworks for web front-end development and Redux is a paradigm that defines a set of constraints to preserve consistency and integrity of the status of the application as it evolves through the interaction with the user or the other parts of the system.<\/p>\n\n\n\n<p>In his overview of NgRx, <a href=\"http:\/\/href=\" target=\"_blank\" rel=\"noopener noreferrer\">Biondi<\/a> highlighted the main concepts derived from Redux and how they blend in with Angular\u2019s components architecture.<br>The Redux approach, a variant of the original Facebook\u2019s Flux design, was born to overcome the critical issues derived from the transposition of the traditional Model-View-Controller (MVC) pattern to the web domain.<br>The lack of a strongly typed variant of the ECMAScript language and the need to manage asynchronous updates when multiple views share the same data are among the many factors that make the MVC pattern difficult to implement and maintain in web applications.<br>As a matter of fact, an approach based on the separation between the server-side managed model and the views exposed by the client, give developers a very limited set of tools to manage the growing complexity of front-end architectures. Moreover, component-based design is not always suitable, as it requires a perfect data encapsulation to effectively decouple data structure from the presentation layer exposed through the UI.<\/p>\n\n\n\n<p>In this regard, Biondi jokingly described the feeling of slow and ineluctable loss of control over data management while the project evolves through several stages of development, which is common to seasoned designers and developers.<br>For complex applications, the adoption of a state manager living on the client-side, like Redux, simplifies data management taking advantage of general principles inspired by functional programming.<\/p>\n\n\n\n<figure class=\"wp-block-embed-twitter aligncenter wp-block-embed is-type-rich is-provider-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Amazing experience at <a href=\"https:\/\/twitter.com\/CodemotionIT?ref_src=twsrc%5Etfw\">@CodemotionIT<\/a> 2018. <br>I spoke in front of 300+ people about &quot;Front-end Data Architectures in <a href=\"https:\/\/twitter.com\/hashtag\/angular?src=hash&amp;ref_src=twsrc%5Etfw\">#angular<\/a>, <a href=\"https:\/\/twitter.com\/hashtag\/ngrx?src=hash&amp;ref_src=twsrc%5Etfw\">#ngrx<\/a> and <a href=\"https:\/\/twitter.com\/hashtag\/redux?src=hash&amp;ref_src=twsrc%5Etfw\">#redux<\/a>&quot;.  Video and slides soon available. I really thank <a href=\"https:\/\/twitter.com\/CodemotionIT?ref_src=twsrc%5Etfw\">@CodemotionIT<\/a> for giving me this opportunity. <a href=\"https:\/\/t.co\/A9wscLmwcN\">pic.twitter.com\/A9wscLmwcN<\/a><\/p>&mdash; Fabio Biondi (@biondifabio) <a href=\"https:\/\/twitter.com\/biondifabio\/status\/1068918495352668160?ref_src=twsrc%5Etfw\">December 1, 2018<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p>NgRx provides an implementation of the Redux pattern based on the reactive extensions for JavaScript (RxJs) for Angular.<br>Within the Redux design, the state of the application is enclosed into a single source of truth, called <em>store<\/em>, that can be modified synchronously by pure functions only, called <em>reducers<\/em>, as a consequence of an <em>action<\/em>.<\/p>\n\n\n\n<p>Actions, in this context, are simple data structures that describe the type of manipulation (delete, increment, etc.) and the element of the store that is addressed by the change.<br>Granting referential transparency to the state, reducers remove the risk of side-effects that can spoil data consistency: the current state is indeed immutable and, instead of being modified directly, it can only be replaced with an updated version. Among other benefits of this approach, a state can easily be reverted, making the implementation of undo\/redo features a trivial task.<br>Each component or view is notified of the change by reactive APIs and updated by <em>selectors<\/em> that act as filters on the contents of the store.<\/p>\n\n\n\n<p>NgRx adds to the basic Redux design a built-in subsystem to manage <em>effects<\/em> that, as a consequence of an action, involve entities different from the angular components of our application or its NgRx store, e.g. sending a XMLHttpRequest (XHR) to an external service.<br>Furthermore, the <em>schematics<\/em> extension to NgRx greatly improves project management, extending the standard Angular CLI. Last but not least, the companion development tools provide advanced debugging features like time-travel debugging.<\/p>\n\n\n\n<p>Like alternative frameworks, e.g React, Flutter and others, Angular with NgRx provides a complete solution to simplify the management of front-end architectures.<br>There are, however, downsides to this approach, as Biondi pointed out. As an example, NgRx has a slow learning curve and requires a certain amount of boiler-plate code and, therefore, it may be an overkill for simple applications.<br>Furthermore, there are several alternatives (Akita, MobxStateTree, etc.) that can be used in place of NgRx, with minor changes to the general workflow and can be more or less suitable for specific purposes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.<\/p>\n","protected":false},"author":33,"featured_media":3044,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":3,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[6],"tags":[4141,22,9907],"collections":[],"class_list":{"0":"post-263","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-frontend","8":"tag-angular","9":"tag-codemotion-milan","10":"tag-frameworks","11":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Front-end development with Angular &amp; NgRx - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Front-end development with Angular &amp; NgRx\" \/>\n<meta property=\"og:description\" content=\"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-28T09:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T14:19:59+00:00\" \/>\n<meta name=\"author\" content=\"Gabriella Giordano\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gabriella Giordano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\"},\"author\":{\"name\":\"Gabriella Giordano\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9\"},\"headline\":\"Front-end development with Angular &#038; NgRx\",\"datePublished\":\"2020-01-28T09:30:00+00:00\",\"dateModified\":\"2021-12-23T14:19:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\"},\"wordCount\":729,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png\",\"keywords\":[\"Angular\",\"Codemotion Milan\",\"Frameworks\"],\"articleSection\":[\"Frontend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\",\"name\":\"Front-end development with Angular & NgRx - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png\",\"datePublished\":\"2020-01-28T09:30:00+00:00\",\"dateModified\":\"2021-12-23T14:19:59+00:00\",\"description\":\"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png\",\"width\":900,\"height\":675,\"caption\":\"fabio biondo codemotion milan 2018\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Front-end development with Angular &#038; NgRx\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9\",\"name\":\"Gabriella Giordano\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g\",\"caption\":\"Gabriella Giordano\"},\"description\":\"I'm a software engineer and I do a lot of Qt\/C++ programming for work, and also for fun :) Currently, I'm running my own ICT consulting company that provides custom software development services and training for IT professionals.\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Front-end development with Angular & NgRx - Codemotion Magazine","description":"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/","og_locale":"en_US","og_type":"article","og_title":"Front-end development with Angular & NgRx","og_description":"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.","og_url":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-01-28T09:30:00+00:00","article_modified_time":"2021-12-23T14:19:59+00:00","author":"Gabriella Giordano","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Gabriella Giordano","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/"},"author":{"name":"Gabriella Giordano","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9"},"headline":"Front-end development with Angular &#038; NgRx","datePublished":"2020-01-28T09:30:00+00:00","dateModified":"2021-12-23T14:19:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/"},"wordCount":729,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png","keywords":["Angular","Codemotion Milan","Frameworks"],"articleSection":["Frontend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/","url":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/","name":"Front-end development with Angular & NgRx - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png","datePublished":"2020-01-28T09:30:00+00:00","dateModified":"2021-12-23T14:19:59+00:00","description":"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png","width":900,"height":675,"caption":"fabio biondo codemotion milan 2018"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/front-end-development-with-angular-ngrx\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Frontend","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/"},{"@type":"ListItem","position":3,"name":"Front-end development with Angular &#038; NgRx"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/34dc42d951a0781e0bf59e7eb3349cc9","name":"Gabriella Giordano","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1f774e60e728e161d77afc375d94c8670bd2d0e48751456650aa735180078b7f?s=96&d=mm&r=g","caption":"Gabriella Giordano"},"description":"I'm a software engineer and I do a lot of Qt\/C++ programming for work, and also for fun :) Currently, I'm running my own ICT consulting company that provides custom software development services and training for IT professionals.","url":"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-600x600.png","author_info":{"display_name":"Gabriella Giordano","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png",900,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-300x225.png",300,225,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-768x576.png",768,576,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png",900,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png",900,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png",900,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV.png",100,75,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/02\/DtWPsaXXgAAeMSV-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"Gabriella Giordano","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/gabriella-giordano\/"},"uagb_comment_info":0,"uagb_excerpt":"At Codemotion Milan, Fabio Biondi talked about Angular and its NgRx extension based on Redux, one of the best technologies for front-end dev in web apps.","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=263"}],"version-history":[{"count":5,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/263\/revisions"}],"predecessor-version":[{"id":15126,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/263\/revisions\/15126"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/3044"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=263"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}