Web Development: You’re (Still) Doing it Wrong
Stefan Tilkov | innoQ | @stilkov
Thursday 17 October 13
Web Development: Youre (Still) Doing it Wrong Stefan Tilkov | innoQ - - PowerPoint PPT Presentation
Web Development: Youre (Still) Doing it Wrong Stefan Tilkov | innoQ | @stilkov Thursday 17 October 13 Annoying your users Thursday 17 October 13 Forbid the use of the back and forward buttons Thursday 17 October 13 Send them to the home
Stefan Tilkov | innoQ | @stilkov
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Let’s build a generic client runtime Defjne a protocol so it can work with any server Allow it to mix services from difgerent backends Defjne a generic, declarative data format Separate content and layout Allow for extensibility with client-side scripting Make it work on any device, with any resolution
Thursday 17 October 13
Thursday 17 October 13
Standardize it, with (rough) consensus Ensure there are multiple client, server and intermediary implementations to choose from Have every client OS ship with an implementation of the generic client Let every programming environment support it
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Server-side components Avoid HTML, JS, CSS Trade Familiarity for Complexity Session-centric ROCA Server-side POSH Client-side components Web-centric Single Page Apps Advanced Client Frameworks Server-side REST APIs
Thursday 17 October 13
(Resource-oriented Client Architecture)
Thursday 17 October 13
Thursday 17 October 13
CSS HTML Content Layout
Thursday 17 October 13
Minimal load times Accessibility Self-descriptiveness Readability
Thursday 17 October 13
Thursday 17 October 13
<order> <shippingAddress>Paris, France</shippingAddress> <items> <item> <productDescription>iPad</productDescription> <quantity>1</quantity> <price>699</price> </item> </items> <link href="http://om.example.com/cancellations" rel="cancel" /> <link href="https://om.example.com/orders/123/payment" rel="payment" /> </order>
Thursday 17 October 13
<html xmlns="http://www.w3.org/1999/xhtml"> <body> <div class="order"> <p class="shippingAddress">Paris, France</p> <ul class="items"> <li class="item"> <p class="productDescription">iPad</p> <p class="quantity">1</p> <p class="price">699</p> </li> </ul> <a href="http://om.example.com/cancellations" rel="cancel">cancel</a> <a href="https://om.example.com/orders/123/payment" rel="payment">payment</a> </div> </body> </html>
Thursday 17 October 13
Data Data Access Business Rules Service Logic Service Interface
WSDL SOAP WS-* XML
Operations Parameters Messages
HTTP JSON XML
Resources Hypermedia Representations
Thursday 17 October 13
Service Interface Service Interface Client Logic
Thursday 17 October 13
Service Interface Service Interface Client Logic
Thursday 17 October 13
Service Interface Service Interface Client Logic
Thursday 17 October 13
Service Interface Service Interface Presentation Logic Orchestration Logic
Thursday 17 October 13
Orchestration Logic Orchestration Logic Presentation Logic
Thursday 17 October 13
Business Logic Business Logic Presentation Logic
Thursday 17 October 13
Thursday 17 October 13
<a href="javascript:doSomething();"> Some Link </a>
Thursday 17 October 13
<a href="#"
Some Link </a>
Thursday 17 October 13
<a href="/some-resource"
Some Link </a>
Thursday 17 October 13
<a href="/some-resource" class="whatever"> Some Link </a>
Thursday 17 October 13
$("a.whatever").click(function() { doSomething(this.href); });
<a href="/some-resource" class="whatever"> Some Link </a>
Thursday 17 October 13
<div id="tabs"> <ul> <li><a href="#tabs-1">Nunc tincidunt</a></li> <li><a href="#tabs-2">Proin dolor</a></li> <li><a href="#tabs-3">Aenean lacinia</a></li> </ul> <div id="tabs-1"> <p>Proin elit arcu, rutrum commodo, vehicula ...</p> </div> <div id="tabs-2"> <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio ...</p> </div> <div id="tabs-3"> <p>Mauris eleifend est et turpis. Duis id erat ...</p> </div>
$("#tabs").tabs();
+
Thursday 17 October 13
Thursday 17 October 13
$('.multiselect', context).each(function() { $(this).multiselect({ selectedList: 2, checkAllText: "Alle", uncheckAllText: "Keinen" }).multiselectfilter({label:"", width:"200px"}); }); <div class="filter-column"> <label for="project">Project</label> <select class="multiselect" id="project" name="project" size="5" multiple> <option>DISCOVER</option> <option>IMPROVE</option> <option >MAGENTA</option> <option>ROCA</option> <option>ROCKET</option> </select> </div>
Thursday 17 October 13
CSS HTML Content Layout
Thursday 17 October 13
JavaScript CSS HTML Content Behavior Layout
Thursday 17 October 13
JS component JS glue code HTML
Events Methods
Component 2 Component 3 ... Layout/CSS
styles styles
Server / Backend
Ajax
initializes Base Markup responds with
Thursday 17 October 13
Thursday 17 October 13
Application Browser Google GET / application/json Filter GET / text/html text/html GET / application/json JS-to-HTML
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
A
http:/ /.../A
Thursday 17 October 13
A B C
http:/ /.../A
Thursday 17 October 13
A
http:/ /.../A
C
http:/ /.../C
B
http:/ /.../B
b c
+ AJAX + CSS
Thursday 17 October 13
A B C
http:/ /.../A
Thursday 17 October 13
Thursday 17 October 13
Multiple tabs & windows Bookmarks Back/Forward/Refresh Personalization Menus
Thursday 17 October 13
http:/ /roca-style.org/
Thursday 17 October 13
Thursday 17 October 13
Pure JavaScript Programming Model Server-side data API “Closed”, desktop-style app Browser as portable runtime platform Ofgline capability
Single Page Apps: Good reasons
Thursday 17 October 13
“That’s how you do it in 2013” “Progressive enhancement is dead” Required for modern, interactive UIs
Single Page Apps: Bad reasons
Thursday 17 October 13
RESTfulness Accessibility
ROCA: Bad reasons
Thursday 17 October 13
Use of browser features General web affjnity Separation of concerns Front-end integration Technology independence SEO
ROCA: Good reasons
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Thursday 17 October 13
Stefan Tilkov, @stilkov stefan.tilkov@innoq.com Phone: +49 170 471 2625
innoQ Deutschland GmbH
40789 Monheim am Rhein Germany Phone: +49 2173 3366-0
innoQ Schweiz GmbH info@innoq.com
CH-6330 Cham Switzerland Phone: +41 41 743 0116
www.innoq.com
Ohlauer Straße 43 10999 Berlin Germany Phone: +49 2173 3366-0 Robert-Bosch-Straße 7 Germany Phone: +49 2173 3366-0 Radlkoferstraße 2 D-81373 München Telefon +49 (0) 89 741185-270
Thursday 17 October 13