<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jakub N</title>
    <description>The latest articles on DEV Community by Jakub N (@mustardsauce).</description>
    <link>https://dev.to/mustardsauce</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F14809%2F4a89d6cd-6fd7-4abb-ab4e-5f75d1f24f41.png</url>
      <title>DEV Community: Jakub N</title>
      <link>https://dev.to/mustardsauce</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mustardsauce"/>
    <language>en</language>
    <item>
      <title>No more MVC</title>
      <dc:creator>Jakub N</dc:creator>
      <pubDate>Sun, 14 Jan 2018 19:01:46 +0000</pubDate>
      <link>https://dev.to/mustardsauce/no-more-mvc-4l97</link>
      <guid>https://dev.to/mustardsauce/no-more-mvc-4l97</guid>
      <description>&lt;h1&gt;
  
  
  What's wrong with MVC?
&lt;/h1&gt;

&lt;p&gt;Model-View-Controller or &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" rel="noopener noreferrer"&gt;MVC&lt;/a&gt; is a software architectural pattern originally developed for desktop user interfaces in the 1970s. Through the years this architecture became very popular in web-development and MVC is even today, after almost 50 years, the way to go with many popular frameworks in different languages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what's wrong with Model-View-Controller?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MVC was originally a design pattern for desktop graphical user interfaces. It has many different interpretations (try &lt;a href="https://www.google.cz/search?client=safari&amp;amp;rls=en&amp;amp;dcr=0&amp;amp;biw=1440&amp;amp;bih=839&amp;amp;tbm=isch&amp;amp;sa=1&amp;amp;ei=p5FbWoa0Kou00gXgga-YDg&amp;amp;q=mvc+diagram&amp;amp;oq=mvc+diagram&amp;amp;gs_l=psy-ab.3..0j0i30k1l3j0i5i30k1l5j0i8i30k1.457354.459660.0.459819.15.14.0.0.0.0.149.1488.8j6.14.0....0...1c.1.64.psy-ab..5.10.1005...0i19k1j0i30i19k1j0i8i30i19k1.0.6XAv3kLRibU" rel="noopener noreferrer"&gt;Google for definition&lt;/a&gt;), many similar/different successors like &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter" rel="noopener noreferrer"&gt;MVP&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel" rel="noopener noreferrer"&gt;MVVM&lt;/a&gt;. However it does not describe well how (&lt;strong&gt;server-side!&lt;/strong&gt;) web-app architecture looks like. That's why &lt;a href="https://github.com/pmjones" rel="noopener noreferrer"&gt;pmjones&lt;/a&gt; comes with refinement of the term MVC for web purposes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Action-Domain-Responder
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fpmjones.io%2Fadr%2Fadr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fpmjones.io%2Fadr%2Fadr.png" alt="Action-Domain-Responder diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Action-Domain-Responder or &lt;a href="http://pmjones.io/adr/" rel="noopener noreferrer"&gt;ADR&lt;/a&gt; is a rather refinement of the term MVC than a brand new architectural pattern. But this new terminology describes much better how we compose our web-applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt; (Controller)&lt;/p&gt;

&lt;p&gt;Handles incoming request, interacts with the Domain and finally passes data (Domain output) to the Responder.&lt;/p&gt;

&lt;p&gt;In traditional MVC the Controller usually contains multiple actions, but incoming requests are dispatched to these action methods, not to the controller itself. Thats why in ADR each Action is represented by individual class or closure. &lt;/p&gt;

&lt;p&gt;There is no interaction with the templating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain&lt;/strong&gt; (Model)&lt;/p&gt;

&lt;p&gt;Business/domain logic, data manipulation etc. There's no big difference between MVC and ADR at this level. Responder might use Domain objects only for presentation purposes i.e. no modifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Responder&lt;/strong&gt; (View)&lt;/p&gt;

&lt;p&gt;Gathers Domain data from the Action. Builds entire HTTP response. Interacts with templating system, sets header and cookie data, status codes etc. &lt;/p&gt;

&lt;p&gt;For each individual Action class/closure there is one Responder class/closure.&lt;/p&gt;




&lt;p&gt;Again, ADR is not something brand new, but a refinement of the MVC definition for purposes of modern server-side web development. It describes better the interactions in such systems and might bring better separation of concerns than original MVC does.&lt;/p&gt;

&lt;h1&gt;
  
  
  Further reading
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/pmjones/adr" rel="noopener noreferrer"&gt;ADR description&lt;/a&gt; by it's author &lt;a href="https://github.com/pmjones" rel="noopener noreferrer"&gt;pmjones&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vimeo.com/106771285" rel="noopener noreferrer"&gt;Talk (video)&lt;/a&gt; by &lt;a href="https://github.com/pmjones" rel="noopener noreferrer"&gt;pmjones&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mvc</category>
      <category>webdev</category>
      <category>designpatterns</category>
      <category>architecture</category>
    </item>
    <item>
      <title>short-circuits &amp;&amp; clean code</title>
      <dc:creator>Jakub N</dc:creator>
      <pubDate>Tue, 28 Nov 2017 20:25:09 +0000</pubDate>
      <link>https://dev.to/mustardsauce/short-circuits--clean-code-1dn</link>
      <guid>https://dev.to/mustardsauce/short-circuits--clean-code-1dn</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;newVariable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;getStuff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;anotherOne&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//do stuff&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; 
&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;anotherOne&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;thisStuffIsTrue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//wtf&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Are &lt;a href="https://en.wikipedia.org/wiki/Short-circuit_evaluation"&gt;short-circuits&lt;/a&gt; considered to be clean code/best practice? I've seen them used in JS recently and despite the code is shorter it is much less readable in my opinion. Same goes with ternary operator overuse.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>practices</category>
      <category>cleancode</category>
    </item>
  </channel>
</rss>
