SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
Design-based Web
 Application Development:

The Essential New Paradigm
            Rob Tweed
     M/Gateway Developments Ltd
Does this sound familiar..?
Does this sound familiar..?
• Acting as advisor on web applications to a
  design consultancy in London
• Won a project to develop a pilot for
  Internet shopping:
  – Major UK supermarket
  – Leading US-based IT vendor
• Recognised that success critically
  depended on design
Does this sound familiar..?
• Lots of background design effort
  – Psychology of shopping
  – Physical versus virtual store layout
• Storyboard developed and accepted
  – Designers were competent with HTML/CSS
• Data model designed and accepted
  – Single A4 page
• So far, so good…
Does this sound familiar..?
• Developing it as a web application was
  beyond the skills of the Design
  Consultancy
• Brought in a team of programmers who
  specialised in web applications
• The rot soon set in….
Does this sound familiar..?
• Oracle data model expanded to a diagram
  the size of the board-room table
  – Incomprehensible to all but the database guy
• Programmers produced a working version
  – But the code was un-recognisable
    • “where’s our HTML gone?”
  – Could not be maintained by the designers
Does this sound familiar..?
• From the moment the programmers were
  involved, the Design Consultancy were out
  of the loop
• Project was in the hands of programmers
  with no design skills
• Project extension:
  – Given to the software company
  – Design Consultancy frozen out
  – Project later crumbled and fizzled out
When was this?
When was this?
• 13 years ago, in 1995
Would things be different today?
Would things be different today?
• No
It’s the single biggest problem in
web/Ajax application development
Why is it a problem?
• What makes an application successful?
• What differentiates:
  – Poor applications?
  – Mediocre applications?
  – Great applications?
Why is it a problem?
• What makes an application successful?
• What differentiates:
  – Poor applications?
  – Mediocre applications?
  – Great applications?
• It’s not the programming!
Web Applications
• What makes an application successful?
• What differentiates:
  – Poor applications?
  – Mediocre applications?
  – Great applications?


• Answer: Design
What’s the problem?
• Web Application Development:
   – Assumed to be a programming task
   – Not a design task
• Designers do not understand:
   – programming
   – databases
• After the initial design stage, the designer has no
  role in the rest of the development lifecycle
• Designs are easier to maintain than programs!
The industry solution?
• AjaxWorld: Yakov Fain (Farata Systems), Mar
  30, 2008:
  – Do We Need to Teach Designers Programming?
  – “Adobe invited professors from different schools to
    discuss what has to change in the curriculum of
    Visual Design and Software Engineering disciplines
    so designers can understand programming better and
    software developers would be better at designing the
    user experience”
  – “Do we need to breed new creatures called d-
    e-s-i-g-n-o-p-e-r and d-e-v-i-g-n-e-r? “
  – “Developers are from Mars; designers are from
    Venus”
The industry solution?
• There isn’t one
Design-focused
       Web/Ajax Development
• So I’m going to propose a way forward
  – based on 13 years’ considering the problem
  – and 10 years’ providing a solution
• Let’s first understand why things are the
  way they are…..
What are web Applications?
• Programs that:
  – Generate HTML
  – Are accessed via HTTP
  – And they access a database
What are web Applications?
• Programs that:
  – Generate HTML
  – Are accessed via HTTP
  – And they access a database
• So they therefore require a programmer
  – Designers understand static HTML pages + CSS
  – Designers don’t understand programming
  – Designers don’t understand databases
Why does it get so complex?
• The web was never designed as an
  application platform:
  – Stateless
    • No concept of a meaningful ongoing dialogue
      between browser and web server
  – HTTP protocol
    • Simple request/response protocol
    • Wide open, simple URL + name/value pair
      structure
    • Inherently insecure and open to abuse
Why does it get so complex?
• The browser only communicates with the
  web server
  – The programs that process the requests and
    generate the HTML responses are hooked in
    behind the web servers
• The web pages are dynamically generated
  by programs and content depends on:
  – What the user has done so far
  – The contents of the database
Why does it get so complex?
• Programmer’s responsibility to:
  – Create the illusion of a session
  – Provide the navigation between generated
    pages in response to user activity
  – Provide a consistent and adequate layer of
    security around the URL requests within a
    session
But we have frameworks don’t we?
• Rather than everyone re-inventing wheels,
  tools have developed that automate these
  mechanisms
• Almost all are based on the concept of the
  Model View Controller (MVC)
Web Application: MVC View



  Web Page 1




    Step 1:
 User decides
  what to do:
eg clicks button
      or link
Web Application: MVC View



Web Page 1




  Step 2:
URL sent to
              Controller
 controller
Web Application: MVC View



 Web Page 1




    Step 3:
URL analysed
and mapped to                 Business
                 Controller
corresponding                   logic
business logic
                 URL map
Web Application: MVC View



  Web Page 1




     Step 4:
 Business logic                  Business
                    Controller              View
selects next view                  logic


                    URL map      Database
                                  (model)
Web Application: MVC View



Web Page 1   Web Page 2




 Step 5:
 View is                  Business
             Controller              View
generated                   logic


             URL map      Database
                           (model)
Web Application: MVC View



         Web Page 2




       Process repeats:
         User decides
          what to do:
       eg clicks button
             or link
Web Application: MVC View
• Web pages are programmatically-
  generated markup = the “view”
• The URL is the focus of attention
• Closely reflects how it actually works
  – Only a very slight level of abstraction
• Totally programmer orientated paradigm
  – Focuses on the how
  – The what and the design gets lost in a ton of
    code
Creating the “Eh?” Team
• In the MVC paradigm:
  – Designer storyboards the application
  – Design agreed
  – Handed over to programmers
  – From this point onwards, designer can no
    longer participate in the life-cycle of the
    application
     • What the programmers develop is
       incomprehensible
• To make matters worse:
Perpetuating the “Eh?” Team
• Little discipline applied by MVC environment
• MVC “plumbing” isn’t automated:
  – How to submit, post and validate forms is left to each
    programmer
  – In-page coding is a free-for-all
  – Cut, paste and modify components
• 1 or more years later, nobody can understand
  their own code, let alone another developer’s
  – Quicker to rewrite pages than figure out how they
    work
So how do we solve this problem?
• Let’s stand back and look at what we’re
  doing…
What are web applications?
• Programs that:
  – Generate HTML
  – Are accessed via HTTP
  – And they access a database
What are web applications?
• Programs that:
  – Generate HTML
  – Are accessed via HTTP
  – And they access a database


• Right?
What are web applications?
• Programs that:
  – Generate HTML
  – Are accessed via HTTP
  – And they access a database


• Right?
  – Yes of course they are in reality
  – But do we need to think of them in this way?
What are web applications?
• Here’s another way to conceptualise them
What are web applications?
• Here’s another way to conceptualise them
• They are web pages:
  – That have some content fetched from a
    database
  – Whose flow between them is determined in
    part by:
    • the user’s interaction; and/or
    • content in the database
“Static” web sites


             Next                Next                Next
Web Page 1   Page   Web Page 2   Page   Web Page 3   Page
Web Application
From a designer’s point of view:



Web Page 1




         Step 1:        fetchData()
   Run a method that
    fetches the data
  needed for the page   Database
Web Application
From a designer’s point of view:



Web Page 1




  Step 2:
Display the
   page
Web Application
 From a designer’s point of view:



  Web Page 1




    Step 3:
 User decides
  what to do:
eg clicks button
      or link
Web Application
From a designer’s point of view:



Web Page 1




         Step 4:        saveData()
   Method called that
  validates and saves
   data into database   Database
Web Application
From a designer’s point of view:


             Next
Web Page 1   Page   Web Page 2




 Step 5:
 Move to
next page
Web Application
From a designer’s point of view:



                       Web Page 2




                       fetchData2()


Repeat the process….    Database
Web Application
From a designer’s point of view:



                 Web Page 1
Design-focused Web Applications
• Page content and navigation is the primary focus
  – No programming code needed in pages
• “Fetch” method called when page loads
• “Save” methods linked with user-triggered
  events (eg submit buttons)
• Technical stuff should “just work”:
  – Invocation of methods
  – Orchestration of the MVC mechanics
  – Session and security management
“Static” web sites


             Next                Next                Next
Web Page 1   Page   Web Page 2   Page   Web Page 3   Page
Design-focused Web Applications


                     Next                      Next                  Next
Web Page 1           Page      Web Page 2      Page     Web Page 3   Page




                        save                   fetch   save
             fetch              fetch   save




                                Database
What about Ajax?
• Event-driven DOM manipulation:
  – replacement of innerHTML
• Page fragments
  – “pages” that just contain the replacement markup
  – fetch and save methods
• Just specify 3 key things:
  – Event
  – Page fragment name
  – Target Id
Design-focused Ajax framework
        “Front-end” technology (PHP, JSP, Python etc)



    Container
      Page




    Fetch
   Method
            State & Session Management


                      “Back-end” Server
Design-focused Ajax framework
                    Replaces DOM content



                Event
   Container            XMLHttpRequest          Page
     Page                                     Fragment
                          Request
                            Page
                          Fragment




                                      Fetch
                                     Method
       State & Session Management


                 “Back-end” Server
Design-focused Ajax framework
                     Replaces DOM content



                 Event
    Container                                    Page
      Page                                     Fragment
                           Request
                             Page
                           Fragment




                                       Fetch
                                      Method
        State & Session Management


                  “Back-end” Server
Design-focused Ajax framework


   Container
     Page




       State & Session Management


                 “Back-end” Server
Interfacing design and programming

• Clearly need a conceptual interface
  through which the designer and
  programmer can inter-operate
• This is provided by the “Session” data
  store
The Session Interface
  Provides the interface between the designer and the programmer



                                 Session
Web Page                                                           Database
                                Data-store



               Designer                         Programmer

             Using special                   Using APIs provided
           syntax to refer to                   by framework
            Session values
No data binding!
• Data binding is a scourge!
  – It begins with a blessing
  – But it ends in a curse
• The Session data-store de-couples the
  page’s data from the physical database
This changes everything
• Any designer who can design HTML
  pages can be in control
  – Abstraction using additional “macro” XML tags
  – Describe what is required, not how to do it
    • No coding apart from occasional, simple Javascript
  – Designer’s high-level pages compiled to
    produce the how
    • Technology-independent
    • PHP, JSP, ASP.Net, Ruby, Python, etc
This changes everything
• Transitions and method orchestration must
  be automated
  – Also session and security management
This changes everything
• What’s left for a programmer is trivial:
     • Fetch
     • Save/validate
Can this be done?
• Our Enterprise Web Developer (EWD)
  technology is built on these concepts
Example: Ext-JS Grid
Ext-JS Javascript version
         <html>
         <head>
         <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=iso-8859-1quot;>
         <title>Array Grid Example</title>
         <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;../../resources/css/ext-all.cssquot; />
         <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;../../resources/css/xtheme-default.cssquot; />
         <script type=quot;text/javascriptquot; src=quot;../../adapter/ext/ext-base.jsquot;></script>
         <script type=quot;text/javascriptquot; src=quot;../../ext-all.jsquot;></script>
         <script type=quot;text/javascriptquot; src=quot;array-grid.jsquot;></script>
         <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;grid-examples.cssquot; />
         <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;../shared/examples.cssquot; />
         <script language=quot;javascriptquot;>
         Ext.onReady(function(){

           var store = new Ext.data.SimpleStore({
               fields: [
                  {name: 'company'},
                  {name: 'price', type: 'float'},
                  {name: 'change', type: 'float'},
                  {name: 'pctChange', type: 'float'},
                  {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
               ]
           });
           store.loadData(myData);
           var grid = new Ext.grid.GridPanel({
               store: store,
               columns: [
                   {id:'company',header: quot;Companyquot;, width: 160, sortable: true, dataIndex: 'company'},
                   {header: quot;Pricequot;, width: 75, sortable: true, renderer: 'usMoney', dataIndex: 'price'},
                   {header: quot;Changequot;, width: 75, sortable: true, renderer: change, dataIndex: 'change'},
                   {header: quot;% Changequot;, width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},
                   {header: quot;Last Updatedquot;, width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
               ],
               stripeRows: true,
               autoExpandColumn: 'company',
               height:350,
               width:600,
               title:'Array Grid'
           });
           grid.render('grid-example');
           grid.getSelectionModel().selectFirstRow();
         });
         </script>
         </head>
         <body>
         <h1>Array Grid Example</h1>
         <div id=quot;grid-examplequot;></div>
         </body>
         </html>
Ext-GWT (Java) version
Ext-GWT (Java) version              package com.extjs.gxt.samples.client.examples.grid;

                                    import java.util.ArrayList;
                                    import java.util.List;

                                    import com.extjs.gxt.samples.resources.client.TestData;
                                    import com.extjs.gxt.samples.resources.client.model.Stock;
                                    import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
            column = new ColumnConfig();
                                    import com.extjs.gxt.ui.client.store.ListStore;
            column.setId(quot;symbolquot;); import com.extjs.gxt.ui.client.widget.ContentPanel;
            column.setHeader(quot;Symbolquot;); com.extjs.gxt.ui.client.widget.LayoutContainer;
                                    import
            column.setWidth(100); import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
            configs.add(column); import com.extjs.gxt.ui.client.widget.grid.ColumnData;
                                    import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
            column = new ColumnConfig();
                                    import com.extjs.gxt.ui.client.widget.grid.Grid;
            column.setId(quot;lastquot;);   import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
            column.setHeader(quot;Lastquot;);
                                    import com.extjs.gxt.ui.client.widget.layout.FitLayout;
            column.setAlignment(HorizontalAlignment.RIGHT);
                                    import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
            column.setWidth(75); import com.extjs.gxt.ui.client.widget.table.NumberCellRenderer;
            column.setRenderer(gridNumber);
                                    import com.google.gwt.i18n.client.DateTimeFormat;
            configs.add(column); import com.google.gwt.i18n.client.NumberFormat;

            column = new ColumnConfig(quot;changequot;, quot;Changequot;,extends LayoutContainer {
                                 public class GridExample 100);
            column.setAlignment(HorizontalAlignment.RIGHT);
            column.setRenderer(change); GridExample() {
                                   public
            configs.add(column);     setLayout(new FlowLayout(10));

            column = new ColumnConfig(quot;datequot;, quot;Last Updatedquot;, 100);NumberFormat.getCurrencyFormat();
                                     final NumberFormat currency =
            column.setAlignment(HorizontalAlignment.RIGHT);
                                     final NumberFormat number = NumberFormat.getFormat(quot;0.00quot;);
            column.setDateTimeFormat(DateTimeFormat.getShortDateFormat());
                                     final NumberCellRenderer<Grid<Stock>> numberRenderer = new NumberCellRenderer<Grid<Stock>>(
            configs.add(column);        currency);

            ListStore<Stock> store = new ListStore<Stock>(); change = new GridCellRenderer<Stock>() {
                                        GridCellRenderer<Stock>
            store.add(TestData.getStocks()); String render(Stock model, String property, ColumnData config, int rowIndex,
                                          public
                                             int colIndex, ListStore<Stock> store) {
            ColumnModel cm = new ColumnModel(configs);
                                            double val = (Double)model.get(property);
                                            String style = val < 0 ? quot;redquot; : quot;greenquot;;
            ContentPanel cp = new ContentPanel(); style='color:quot; + style + quot;'>quot; + number.format(val) + quot;</span>quot;;
                                            return quot;<span
            cp.setBodyBorder(false); }
            cp.setHeading(quot;Basic Gridquot;);};
            cp.setButtonAlign(HorizontalAlignment.CENTER);
            cp.setLayout(new FitLayout());
                                        GridCellRenderer<Stock> gridNumber = new GridCellRenderer<Stock>() {
            cp.setSize(600, 300);         public String render(Stock model, String property, ColumnData config, int rowIndex,
                                             int colIndex, ListStore<Stock> store) {
            Grid<Stock> grid = new Grid<Stock>(store, cm);
                                            return numberRenderer.render(null, property, model.get(property));
            grid.setStyleAttribute(quot;borderTopquot;, quot;nonequot;);
                                          }
            grid.setAutoExpandColumn(quot;namequot;);
                                        };
            grid.setBorders(true);
            cp.add(grid);               List<ColumnConfig> configs = new ArrayList<ColumnConfig>();

            add(cp);                  ColumnConfig column = new ColumnConfig();
        }                             column.setId(quot;namequot;);
                                      column.setHeader(quot;Companyquot;);
    }                                 column.setWidth(200);
                                      configs.add(column);
Design-focused version



    <ewd:config fetchMethod=quot;ewd.test.getAJWGridDataquot;>
    <ext:config path=quot;/ext-2.2quot; />

    <html>
    <head>
    <title>Design-focused Development: ExtJS Grid Examples</title>
    </head>
    <body>

    <ext:grid datastore=quot;stocksquot; title=quot;Array Gridquot; stripeRows=quot;truequot; autofill=quot;falsequot; width=quot;600quot; height=quot;350quot;>
     <ext:gridColumn header=quot;Companyquot; width=quot;265quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;Pricequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;% Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;Last Updatedquot; width=quot;85quot; type=quot;datequot; dateFormat=quot;n/j h:iaquot; sortable=quot;truequot; />
    </ext:grid>

    </body>
    </html>
Design-focused version
                                                                          Ajax Navigation
    <ewd:config fetchMethod=quot;ewd.test.getAJWGridDataquot;>
    <ext:config path=quot;/ext-2.2quot; />                                        •Event
    <ewd:xhtml>                                                           •Next Fragment
    <head>
     <title>Design-focused Development: ExtJS Grid Examples</title>       •Target ID
    <script language=quot;javascriptquot;>
    function moveOn(currentRecord,currentRow) {
     var nvp=quot;record=quot; + currentRecord ;
     ewd.ajaxRequest(quot;myNextPagequot;,quot;myTargetDivquot;,nvp);
    }
    </script>
    </head>
    <body>

    <ext:grid datastore=quot;stocksquot; title=quot;Array Gridquot; stripeRows=quot;truequot; autofill=quot;falsequot; width=quot;600quot; height=quot;350“
      onRowSelect=quot;moveOnquot;>
     <ext:gridColumn header=quot;Companyquot; width=quot;265quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;Pricequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;% Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; />
     <ext:gridColumn header=quot;Last Updatedquot; width=quot;85quot; type=quot;datequot; dateFormat=quot;n/j h:iaquot; sortable=quot;truequot; />
    </ext:grid>

    </body>
    </ewd:xhtml>
The “A” Team
• Designer stays in control throughout the lifecyle
• Designer doesn’t need to have any knowledge of
  programming, business logic or database
  structure/content
• Programmer just focuses on business logic to
  fetch/validate/process/save data
  –   doesn’t waste any time on the “plumbing”
  –   Isolated from design issues
  –   Standardised processes
  –   Discipline occurs because it’s the line of least
      resistance during development
Design-focused Development
• Proven benefits:
  – Much higher productivity compared with conventional
    techniques
  – Applications are focused on design requirements
     • designer retains control throughout the life-cycle
  – Cuts out all the complexity of Ajax
  – Integrates with most UI/widget libraries
     • Leverage “best of breed” instead of reinventing wheels
  – Significantly lower maintenance than conventional
    techniques
     • Because you just describe the what, not the how
     • Build an “A” team, not an “eh?” team!
Conclusions
• The programmer-focused approach has
  had its day
• Design, not programming, must take
  centre-stage
• None of the main industry players have a
  solution
• It’s not just theory
• Come and see how it can be done!

Contenu connexe

Tendances

Usability in the GeoWeb
Usability in the GeoWebUsability in the GeoWeb
Usability in the GeoWeb
Dave Bouwman
 
Atidan - BrightWork Project Management 2013 for SharePoint Webinar
Atidan - BrightWork Project Management 2013 for SharePoint WebinarAtidan - BrightWork Project Management 2013 for SharePoint Webinar
Atidan - BrightWork Project Management 2013 for SharePoint Webinar
David J Rosenthal
 
MS PowerPoint format
MS PowerPoint formatMS PowerPoint format
MS PowerPoint format
webhostingguy
 

Tendances (19)

Stop SharePoint Project Failure
Stop SharePoint Project FailureStop SharePoint Project Failure
Stop SharePoint Project Failure
 
MYDATA
MYDATAMYDATA
MYDATA
 
Using Responsive Web Design To Make Your Web Work Everywhere - Updated
Using Responsive Web Design To Make Your Web Work Everywhere - UpdatedUsing Responsive Web Design To Make Your Web Work Everywhere - Updated
Using Responsive Web Design To Make Your Web Work Everywhere - Updated
 
Usability in the GeoWeb
Usability in the GeoWebUsability in the GeoWeb
Usability in the GeoWeb
 
SharePoint 2013 Preview
SharePoint 2013 PreviewSharePoint 2013 Preview
SharePoint 2013 Preview
 
Making Facebook Faster
Making Facebook FasterMaking Facebook Faster
Making Facebook Faster
 
Atidan - BrightWork Project Management 2013 for SharePoint Webinar
Atidan - BrightWork Project Management 2013 for SharePoint WebinarAtidan - BrightWork Project Management 2013 for SharePoint Webinar
Atidan - BrightWork Project Management 2013 for SharePoint Webinar
 
Webengineering lecture 6
Webengineering lecture 6Webengineering lecture 6
Webengineering lecture 6
 
MS PowerPoint format
MS PowerPoint formatMS PowerPoint format
MS PowerPoint format
 
17 Web Performance Metrics You Should Care About
17 Web Performance Metrics You Should Care About17 Web Performance Metrics You Should Care About
17 Web Performance Metrics You Should Care About
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
 
40 web design trends in 2015
40 web design trends in 201540 web design trends in 2015
40 web design trends in 2015
 
Html5 Fit: Get Rid of Love Handles
Html5 Fit:  Get Rid of Love HandlesHtml5 Fit:  Get Rid of Love Handles
Html5 Fit: Get Rid of Love Handles
 
M is for modernization
M is for modernizationM is for modernization
M is for modernization
 
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
Kirtesh Khandelwal,Project on HTML and CSS ,Final Year BCA , Dezyne E'cole Co...
 
College Web Site HTML PROJECT
College Web Site HTML PROJECTCollege Web Site HTML PROJECT
College Web Site HTML PROJECT
 
Service workers your applications never felt so good
Service workers   your applications never felt so goodService workers   your applications never felt so good
Service workers your applications never felt so good
 
Managing Accessibility Compliance
Managing Accessibility ComplianceManaging Accessibility Compliance
Managing Accessibility Compliance
 
Introduction to Progressive Web Applications
Introduction to Progressive Web ApplicationsIntroduction to Progressive Web Applications
Introduction to Progressive Web Applications
 

En vedette

Ajax World2008 Eric Farrar
Ajax World2008 Eric FarrarAjax World2008 Eric Farrar
Ajax World2008 Eric Farrar
rajivmordani
 
Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008
rajivmordani
 
I Phone Presentation Jan Linden Gips
I Phone Presentation Jan Linden GipsI Phone Presentation Jan Linden Gips
I Phone Presentation Jan Linden Gips
rajivmordani
 
08 10 12 Meebo Ajaxworld Preso
08 10 12 Meebo Ajaxworld Preso08 10 12 Meebo Ajaxworld Preso
08 10 12 Meebo Ajaxworld Preso
rajivmordani
 
Ajax Integration Guide
Ajax Integration GuideAjax Integration Guide
Ajax Integration Guide
rajivmordani
 
Ajax World West I Phone Summit
Ajax World West I Phone SummitAjax World West I Phone Summit
Ajax World West I Phone Summit
rajivmordani
 

En vedette (8)

Ajax World2008 Eric Farrar
Ajax World2008 Eric FarrarAjax World2008 Eric Farrar
Ajax World2008 Eric Farrar
 
Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008Laird Best Practices Ajax World West2008
Laird Best Practices Ajax World West2008
 
I Phone Presentation Jan Linden Gips
I Phone Presentation Jan Linden GipsI Phone Presentation Jan Linden Gips
I Phone Presentation Jan Linden Gips
 
08 10 12 Meebo Ajaxworld Preso
08 10 12 Meebo Ajaxworld Preso08 10 12 Meebo Ajaxworld Preso
08 10 12 Meebo Ajaxworld Preso
 
Ajax Integration Guide
Ajax Integration GuideAjax Integration Guide
Ajax Integration Guide
 
Ajax World Fall08
Ajax World Fall08Ajax World Fall08
Ajax World Fall08
 
Ajax World West I Phone Summit
Ajax World West I Phone SummitAjax World West I Phone Summit
Ajax World West I Phone Summit
 
Jsf Ajax
Jsf AjaxJsf Ajax
Jsf Ajax
 

Similaire à Design Based Dev

Introduction to MVC in Flex and HydraMVC
Introduction to MVC in Flex and HydraMVCIntroduction to MVC in Flex and HydraMVC
Introduction to MVC in Flex and HydraMVC
cltru
 
Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)
Michael Dobe, Ph.D.
 
Hey open source, don’t forget the user! - by Chad Kieffer
Hey open source,  don’t forget the user! - by Chad KiefferHey open source,  don’t forget the user! - by Chad Kieffer
Hey open source, don’t forget the user! - by Chad Kieffer
dmthompson
 
Web Publishing: An Overview of Tools and Service
Web Publishing: An Overview of Tools and ServiceWeb Publishing: An Overview of Tools and Service
Web Publishing: An Overview of Tools and Service
kilmeny21
 

Similaire à Design Based Dev (20)

Introduction to MVC in Flex and HydraMVC
Introduction to MVC in Flex and HydraMVCIntroduction to MVC in Flex and HydraMVC
Introduction to MVC in Flex and HydraMVC
 
Ajax World West
Ajax World WestAjax World West
Ajax World West
 
Documenting For Interactive Websites
Documenting For Interactive WebsitesDocumenting For Interactive Websites
Documenting For Interactive Websites
 
2010 - Basta: ASP.NET Controls für Web Forms und MVC
2010 - Basta: ASP.NET Controls für Web Forms und MVC2010 - Basta: ASP.NET Controls für Web Forms und MVC
2010 - Basta: ASP.NET Controls für Web Forms und MVC
 
Performance and Scalability Art of Isomorphic React Applications
Performance and Scalability Art of Isomorphic React ApplicationsPerformance and Scalability Art of Isomorphic React Applications
Performance and Scalability Art of Isomorphic React Applications
 
www.webre24h.com - An ajax tool for online modeling
www.webre24h.com - An ajax tool for online modelingwww.webre24h.com - An ajax tool for online modeling
www.webre24h.com - An ajax tool for online modeling
 
Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)Rutgers - FrontPage 98 (Advanced)
Rutgers - FrontPage 98 (Advanced)
 
DevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More DefectsDevOps: Find Solutions, Not More Defects
DevOps: Find Solutions, Not More Defects
 
Hey open source, don’t forget the user! - by Chad Kieffer
Hey open source,  don’t forget the user! - by Chad KiefferHey open source,  don’t forget the user! - by Chad Kieffer
Hey open source, don’t forget the user! - by Chad Kieffer
 
JUG Poznan - 2017.01.31
JUG Poznan - 2017.01.31 JUG Poznan - 2017.01.31
JUG Poznan - 2017.01.31
 
Web Publishing: An Overview of Tools and Service
Web Publishing: An Overview of Tools and ServiceWeb Publishing: An Overview of Tools and Service
Web Publishing: An Overview of Tools and Service
 
qadeer intern report.pdf
qadeer intern report.pdfqadeer intern report.pdf
qadeer intern report.pdf
 
niharika saxena
niharika saxenaniharika saxena
niharika saxena
 
IWMW 1998: Dataweb: Three Worlds Colide
IWMW 1998: Dataweb: Three Worlds ColideIWMW 1998: Dataweb: Three Worlds Colide
IWMW 1998: Dataweb: Three Worlds Colide
 
MCA Society Project Seminar.pptx
MCA Society Project Seminar.pptxMCA Society Project Seminar.pptx
MCA Society Project Seminar.pptx
 
Struts natraj - satya
Struts   natraj - satyaStruts   natraj - satya
Struts natraj - satya
 
Struts natraj - satya
Struts   natraj - satyaStruts   natraj - satya
Struts natraj - satya
 
Struts notes
Struts notesStruts notes
Struts notes
 
Introduction to Web Frameworks
Introduction to Web FrameworksIntroduction to Web Frameworks
Introduction to Web Frameworks
 
Transforming the web into a real application platform
Transforming the web into a real application platformTransforming the web into a real application platform
Transforming the web into a real application platform
 

Plus de rajivmordani

Web 2 0 Data Visualization With Jsf
Web 2 0 Data Visualization With JsfWeb 2 0 Data Visualization With Jsf
Web 2 0 Data Visualization With Jsf
rajivmordani
 
X Aware Ajax World V1
X Aware Ajax World V1X Aware Ajax World V1
X Aware Ajax World V1
rajivmordani
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
rajivmordani
 
Tripit Ajaxworld V5
Tripit Ajaxworld V5Tripit Ajaxworld V5
Tripit Ajaxworld V5
rajivmordani
 
Turbo Enterprise Web 2.0 Ajax World 20081
Turbo Enterprise Web 2.0 Ajax World 20081Turbo Enterprise Web 2.0 Ajax World 20081
Turbo Enterprise Web 2.0 Ajax World 20081
rajivmordani
 
Sue Googe Spice Up Ux
Sue Googe Spice Up UxSue Googe Spice Up Ux
Sue Googe Spice Up Ux
rajivmordani
 
Social Networking Intranet
Social Networking IntranetSocial Networking Intranet
Social Networking Intranet
rajivmordani
 
Practical Thin Server Architecture With Dojo Peter Svensson
Practical Thin Server Architecture With Dojo Peter SvenssonPractical Thin Server Architecture With Dojo Peter Svensson
Practical Thin Server Architecture With Dojo Peter Svensson
rajivmordani
 
Server Side Javascript
Server Side JavascriptServer Side Javascript
Server Side Javascript
rajivmordani
 
Slow Cool 20081009 Final
Slow Cool 20081009 FinalSlow Cool 20081009 Final
Slow Cool 20081009 Final
rajivmordani
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
rajivmordani
 
I Phone Dev Summit Prezo Guy Naor Final
I Phone Dev Summit Prezo Guy Naor FinalI Phone Dev Summit Prezo Guy Naor Final
I Phone Dev Summit Prezo Guy Naor Final
rajivmordani
 
Netapp Michael Galpin
Netapp Michael GalpinNetapp Michael Galpin
Netapp Michael Galpin
rajivmordani
 
Mike Grushin Developing Ugc Sites That Scale
Mike Grushin    Developing Ugc Sites That ScaleMike Grushin    Developing Ugc Sites That Scale
Mike Grushin Developing Ugc Sites That Scale
rajivmordani
 
Java Fx Ajaxworld Rags V1
Java Fx Ajaxworld Rags V1Java Fx Ajaxworld Rags V1
Java Fx Ajaxworld Rags V1
rajivmordani
 
Good Parts of JavaScript Douglas Crockford
Good Parts of JavaScript Douglas CrockfordGood Parts of JavaScript Douglas Crockford
Good Parts of JavaScript Douglas Crockford
rajivmordani
 
Flying Pixels Ent Apps Jeremy Chone
Flying Pixels Ent Apps Jeremy ChoneFlying Pixels Ent Apps Jeremy Chone
Flying Pixels Ent Apps Jeremy Chone
rajivmordani
 

Plus de rajivmordani (20)

Web 2 0 Data Visualization With Jsf
Web 2 0 Data Visualization With JsfWeb 2 0 Data Visualization With Jsf
Web 2 0 Data Visualization With Jsf
 
X Aware Ajax World V1
X Aware Ajax World V1X Aware Ajax World V1
X Aware Ajax World V1
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
 
Tripit Ajaxworld V5
Tripit Ajaxworld V5Tripit Ajaxworld V5
Tripit Ajaxworld V5
 
Turbo Enterprise Web 2.0 Ajax World 20081
Turbo Enterprise Web 2.0 Ajax World 20081Turbo Enterprise Web 2.0 Ajax World 20081
Turbo Enterprise Web 2.0 Ajax World 20081
 
Sue Googe Spice Up Ux
Sue Googe Spice Up UxSue Googe Spice Up Ux
Sue Googe Spice Up Ux
 
Social Networking Intranet
Social Networking IntranetSocial Networking Intranet
Social Networking Intranet
 
Ssjs Presentation
Ssjs PresentationSsjs Presentation
Ssjs Presentation
 
Practical Thin Server Architecture With Dojo Peter Svensson
Practical Thin Server Architecture With Dojo Peter SvenssonPractical Thin Server Architecture With Dojo Peter Svensson
Practical Thin Server Architecture With Dojo Peter Svensson
 
Server Side Javascript
Server Side JavascriptServer Side Javascript
Server Side Javascript
 
Ria Enterprise
Ria EnterpriseRia Enterprise
Ria Enterprise
 
Slow Cool 20081009 Final
Slow Cool 20081009 FinalSlow Cool 20081009 Final
Slow Cool 20081009 Final
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
 
I Phone Dev Summit Prezo Guy Naor Final
I Phone Dev Summit Prezo Guy Naor FinalI Phone Dev Summit Prezo Guy Naor Final
I Phone Dev Summit Prezo Guy Naor Final
 
Netapp Michael Galpin
Netapp Michael GalpinNetapp Michael Galpin
Netapp Michael Galpin
 
Mike Grushin Developing Ugc Sites That Scale
Mike Grushin    Developing Ugc Sites That ScaleMike Grushin    Developing Ugc Sites That Scale
Mike Grushin Developing Ugc Sites That Scale
 
Java Fx Ajaxworld Rags V1
Java Fx Ajaxworld Rags V1Java Fx Ajaxworld Rags V1
Java Fx Ajaxworld Rags V1
 
Good Parts of JavaScript Douglas Crockford
Good Parts of JavaScript Douglas CrockfordGood Parts of JavaScript Douglas Crockford
Good Parts of JavaScript Douglas Crockford
 
Flying Pixels Ent Apps Jeremy Chone
Flying Pixels Ent Apps Jeremy ChoneFlying Pixels Ent Apps Jeremy Chone
Flying Pixels Ent Apps Jeremy Chone
 
I Phone Dev
I Phone DevI Phone Dev
I Phone Dev
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Dernier (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 

Design Based Dev

  • 1. Design-based Web Application Development: The Essential New Paradigm Rob Tweed M/Gateway Developments Ltd
  • 2. Does this sound familiar..?
  • 3. Does this sound familiar..? • Acting as advisor on web applications to a design consultancy in London • Won a project to develop a pilot for Internet shopping: – Major UK supermarket – Leading US-based IT vendor • Recognised that success critically depended on design
  • 4. Does this sound familiar..? • Lots of background design effort – Psychology of shopping – Physical versus virtual store layout • Storyboard developed and accepted – Designers were competent with HTML/CSS • Data model designed and accepted – Single A4 page • So far, so good…
  • 5. Does this sound familiar..? • Developing it as a web application was beyond the skills of the Design Consultancy • Brought in a team of programmers who specialised in web applications • The rot soon set in….
  • 6. Does this sound familiar..? • Oracle data model expanded to a diagram the size of the board-room table – Incomprehensible to all but the database guy • Programmers produced a working version – But the code was un-recognisable • “where’s our HTML gone?” – Could not be maintained by the designers
  • 7. Does this sound familiar..? • From the moment the programmers were involved, the Design Consultancy were out of the loop • Project was in the hands of programmers with no design skills • Project extension: – Given to the software company – Design Consultancy frozen out – Project later crumbled and fizzled out
  • 9. When was this? • 13 years ago, in 1995
  • 10. Would things be different today?
  • 11. Would things be different today? • No
  • 12. It’s the single biggest problem in web/Ajax application development
  • 13. Why is it a problem? • What makes an application successful? • What differentiates: – Poor applications? – Mediocre applications? – Great applications?
  • 14. Why is it a problem? • What makes an application successful? • What differentiates: – Poor applications? – Mediocre applications? – Great applications? • It’s not the programming!
  • 15. Web Applications • What makes an application successful? • What differentiates: – Poor applications? – Mediocre applications? – Great applications? • Answer: Design
  • 16. What’s the problem? • Web Application Development: – Assumed to be a programming task – Not a design task • Designers do not understand: – programming – databases • After the initial design stage, the designer has no role in the rest of the development lifecycle • Designs are easier to maintain than programs!
  • 17. The industry solution? • AjaxWorld: Yakov Fain (Farata Systems), Mar 30, 2008: – Do We Need to Teach Designers Programming? – “Adobe invited professors from different schools to discuss what has to change in the curriculum of Visual Design and Software Engineering disciplines so designers can understand programming better and software developers would be better at designing the user experience” – “Do we need to breed new creatures called d- e-s-i-g-n-o-p-e-r and d-e-v-i-g-n-e-r? “ – “Developers are from Mars; designers are from Venus”
  • 18. The industry solution? • There isn’t one
  • 19. Design-focused Web/Ajax Development • So I’m going to propose a way forward – based on 13 years’ considering the problem – and 10 years’ providing a solution • Let’s first understand why things are the way they are…..
  • 20. What are web Applications? • Programs that: – Generate HTML – Are accessed via HTTP – And they access a database
  • 21. What are web Applications? • Programs that: – Generate HTML – Are accessed via HTTP – And they access a database • So they therefore require a programmer – Designers understand static HTML pages + CSS – Designers don’t understand programming – Designers don’t understand databases
  • 22. Why does it get so complex? • The web was never designed as an application platform: – Stateless • No concept of a meaningful ongoing dialogue between browser and web server – HTTP protocol • Simple request/response protocol • Wide open, simple URL + name/value pair structure • Inherently insecure and open to abuse
  • 23. Why does it get so complex? • The browser only communicates with the web server – The programs that process the requests and generate the HTML responses are hooked in behind the web servers • The web pages are dynamically generated by programs and content depends on: – What the user has done so far – The contents of the database
  • 24. Why does it get so complex? • Programmer’s responsibility to: – Create the illusion of a session – Provide the navigation between generated pages in response to user activity – Provide a consistent and adequate layer of security around the URL requests within a session
  • 25. But we have frameworks don’t we? • Rather than everyone re-inventing wheels, tools have developed that automate these mechanisms • Almost all are based on the concept of the Model View Controller (MVC)
  • 26. Web Application: MVC View Web Page 1 Step 1: User decides what to do: eg clicks button or link
  • 27. Web Application: MVC View Web Page 1 Step 2: URL sent to Controller controller
  • 28. Web Application: MVC View Web Page 1 Step 3: URL analysed and mapped to Business Controller corresponding logic business logic URL map
  • 29. Web Application: MVC View Web Page 1 Step 4: Business logic Business Controller View selects next view logic URL map Database (model)
  • 30. Web Application: MVC View Web Page 1 Web Page 2 Step 5: View is Business Controller View generated logic URL map Database (model)
  • 31. Web Application: MVC View Web Page 2 Process repeats: User decides what to do: eg clicks button or link
  • 32. Web Application: MVC View • Web pages are programmatically- generated markup = the “view” • The URL is the focus of attention • Closely reflects how it actually works – Only a very slight level of abstraction • Totally programmer orientated paradigm – Focuses on the how – The what and the design gets lost in a ton of code
  • 33. Creating the “Eh?” Team • In the MVC paradigm: – Designer storyboards the application – Design agreed – Handed over to programmers – From this point onwards, designer can no longer participate in the life-cycle of the application • What the programmers develop is incomprehensible
  • 34. • To make matters worse:
  • 35. Perpetuating the “Eh?” Team • Little discipline applied by MVC environment • MVC “plumbing” isn’t automated: – How to submit, post and validate forms is left to each programmer – In-page coding is a free-for-all – Cut, paste and modify components • 1 or more years later, nobody can understand their own code, let alone another developer’s – Quicker to rewrite pages than figure out how they work
  • 36. So how do we solve this problem? • Let’s stand back and look at what we’re doing…
  • 37. What are web applications? • Programs that: – Generate HTML – Are accessed via HTTP – And they access a database
  • 38. What are web applications? • Programs that: – Generate HTML – Are accessed via HTTP – And they access a database • Right?
  • 39. What are web applications? • Programs that: – Generate HTML – Are accessed via HTTP – And they access a database • Right? – Yes of course they are in reality – But do we need to think of them in this way?
  • 40. What are web applications? • Here’s another way to conceptualise them
  • 41. What are web applications? • Here’s another way to conceptualise them • They are web pages: – That have some content fetched from a database – Whose flow between them is determined in part by: • the user’s interaction; and/or • content in the database
  • 42. “Static” web sites Next Next Next Web Page 1 Page Web Page 2 Page Web Page 3 Page
  • 43. Web Application From a designer’s point of view: Web Page 1 Step 1: fetchData() Run a method that fetches the data needed for the page Database
  • 44. Web Application From a designer’s point of view: Web Page 1 Step 2: Display the page
  • 45. Web Application From a designer’s point of view: Web Page 1 Step 3: User decides what to do: eg clicks button or link
  • 46. Web Application From a designer’s point of view: Web Page 1 Step 4: saveData() Method called that validates and saves data into database Database
  • 47. Web Application From a designer’s point of view: Next Web Page 1 Page Web Page 2 Step 5: Move to next page
  • 48. Web Application From a designer’s point of view: Web Page 2 fetchData2() Repeat the process…. Database
  • 49. Web Application From a designer’s point of view: Web Page 1
  • 50. Design-focused Web Applications • Page content and navigation is the primary focus – No programming code needed in pages • “Fetch” method called when page loads • “Save” methods linked with user-triggered events (eg submit buttons) • Technical stuff should “just work”: – Invocation of methods – Orchestration of the MVC mechanics – Session and security management
  • 51. “Static” web sites Next Next Next Web Page 1 Page Web Page 2 Page Web Page 3 Page
  • 52. Design-focused Web Applications Next Next Next Web Page 1 Page Web Page 2 Page Web Page 3 Page save fetch save fetch fetch save Database
  • 53. What about Ajax? • Event-driven DOM manipulation: – replacement of innerHTML • Page fragments – “pages” that just contain the replacement markup – fetch and save methods • Just specify 3 key things: – Event – Page fragment name – Target Id
  • 54. Design-focused Ajax framework “Front-end” technology (PHP, JSP, Python etc) Container Page Fetch Method State & Session Management “Back-end” Server
  • 55. Design-focused Ajax framework Replaces DOM content Event Container XMLHttpRequest Page Page Fragment Request Page Fragment Fetch Method State & Session Management “Back-end” Server
  • 56. Design-focused Ajax framework Replaces DOM content Event Container Page Page Fragment Request Page Fragment Fetch Method State & Session Management “Back-end” Server
  • 57. Design-focused Ajax framework Container Page State & Session Management “Back-end” Server
  • 58. Interfacing design and programming • Clearly need a conceptual interface through which the designer and programmer can inter-operate • This is provided by the “Session” data store
  • 59. The Session Interface Provides the interface between the designer and the programmer Session Web Page Database Data-store Designer Programmer Using special Using APIs provided syntax to refer to by framework Session values
  • 60. No data binding! • Data binding is a scourge! – It begins with a blessing – But it ends in a curse • The Session data-store de-couples the page’s data from the physical database
  • 61. This changes everything • Any designer who can design HTML pages can be in control – Abstraction using additional “macro” XML tags – Describe what is required, not how to do it • No coding apart from occasional, simple Javascript – Designer’s high-level pages compiled to produce the how • Technology-independent • PHP, JSP, ASP.Net, Ruby, Python, etc
  • 62. This changes everything • Transitions and method orchestration must be automated – Also session and security management
  • 63. This changes everything • What’s left for a programmer is trivial: • Fetch • Save/validate
  • 64. Can this be done? • Our Enterprise Web Developer (EWD) technology is built on these concepts
  • 66. Ext-JS Javascript version <html> <head> <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=iso-8859-1quot;> <title>Array Grid Example</title> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;../../resources/css/ext-all.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;../../resources/css/xtheme-default.cssquot; /> <script type=quot;text/javascriptquot; src=quot;../../adapter/ext/ext-base.jsquot;></script> <script type=quot;text/javascriptquot; src=quot;../../ext-all.jsquot;></script> <script type=quot;text/javascriptquot; src=quot;array-grid.jsquot;></script> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;grid-examples.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;../shared/examples.cssquot; /> <script language=quot;javascriptquot;> Ext.onReady(function(){ var store = new Ext.data.SimpleStore({ fields: [ {name: 'company'}, {name: 'price', type: 'float'}, {name: 'change', type: 'float'}, {name: 'pctChange', type: 'float'}, {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'} ] }); store.loadData(myData); var grid = new Ext.grid.GridPanel({ store: store, columns: [ {id:'company',header: quot;Companyquot;, width: 160, sortable: true, dataIndex: 'company'}, {header: quot;Pricequot;, width: 75, sortable: true, renderer: 'usMoney', dataIndex: 'price'}, {header: quot;Changequot;, width: 75, sortable: true, renderer: change, dataIndex: 'change'}, {header: quot;% Changequot;, width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'}, {header: quot;Last Updatedquot;, width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'} ], stripeRows: true, autoExpandColumn: 'company', height:350, width:600, title:'Array Grid' }); grid.render('grid-example'); grid.getSelectionModel().selectFirstRow(); }); </script> </head> <body> <h1>Array Grid Example</h1> <div id=quot;grid-examplequot;></div> </body> </html>
  • 68. Ext-GWT (Java) version package com.extjs.gxt.samples.client.examples.grid; import java.util.ArrayList; import java.util.List; import com.extjs.gxt.samples.resources.client.TestData; import com.extjs.gxt.samples.resources.client.model.Stock; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; column = new ColumnConfig(); import com.extjs.gxt.ui.client.store.ListStore; column.setId(quot;symbolquot;); import com.extjs.gxt.ui.client.widget.ContentPanel; column.setHeader(quot;Symbolquot;); com.extjs.gxt.ui.client.widget.LayoutContainer; import column.setWidth(100); import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; configs.add(column); import com.extjs.gxt.ui.client.widget.grid.ColumnData; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; column = new ColumnConfig(); import com.extjs.gxt.ui.client.widget.grid.Grid; column.setId(quot;lastquot;); import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; column.setHeader(quot;Lastquot;); import com.extjs.gxt.ui.client.widget.layout.FitLayout; column.setAlignment(HorizontalAlignment.RIGHT); import com.extjs.gxt.ui.client.widget.layout.FlowLayout; column.setWidth(75); import com.extjs.gxt.ui.client.widget.table.NumberCellRenderer; column.setRenderer(gridNumber); import com.google.gwt.i18n.client.DateTimeFormat; configs.add(column); import com.google.gwt.i18n.client.NumberFormat; column = new ColumnConfig(quot;changequot;, quot;Changequot;,extends LayoutContainer { public class GridExample 100); column.setAlignment(HorizontalAlignment.RIGHT); column.setRenderer(change); GridExample() { public configs.add(column); setLayout(new FlowLayout(10)); column = new ColumnConfig(quot;datequot;, quot;Last Updatedquot;, 100);NumberFormat.getCurrencyFormat(); final NumberFormat currency = column.setAlignment(HorizontalAlignment.RIGHT); final NumberFormat number = NumberFormat.getFormat(quot;0.00quot;); column.setDateTimeFormat(DateTimeFormat.getShortDateFormat()); final NumberCellRenderer<Grid<Stock>> numberRenderer = new NumberCellRenderer<Grid<Stock>>( configs.add(column); currency); ListStore<Stock> store = new ListStore<Stock>(); change = new GridCellRenderer<Stock>() { GridCellRenderer<Stock> store.add(TestData.getStocks()); String render(Stock model, String property, ColumnData config, int rowIndex, public int colIndex, ListStore<Stock> store) { ColumnModel cm = new ColumnModel(configs); double val = (Double)model.get(property); String style = val < 0 ? quot;redquot; : quot;greenquot;; ContentPanel cp = new ContentPanel(); style='color:quot; + style + quot;'>quot; + number.format(val) + quot;</span>quot;; return quot;<span cp.setBodyBorder(false); } cp.setHeading(quot;Basic Gridquot;);}; cp.setButtonAlign(HorizontalAlignment.CENTER); cp.setLayout(new FitLayout()); GridCellRenderer<Stock> gridNumber = new GridCellRenderer<Stock>() { cp.setSize(600, 300); public String render(Stock model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Stock> store) { Grid<Stock> grid = new Grid<Stock>(store, cm); return numberRenderer.render(null, property, model.get(property)); grid.setStyleAttribute(quot;borderTopquot;, quot;nonequot;); } grid.setAutoExpandColumn(quot;namequot;); }; grid.setBorders(true); cp.add(grid); List<ColumnConfig> configs = new ArrayList<ColumnConfig>(); add(cp); ColumnConfig column = new ColumnConfig(); } column.setId(quot;namequot;); column.setHeader(quot;Companyquot;); } column.setWidth(200); configs.add(column);
  • 69. Design-focused version <ewd:config fetchMethod=quot;ewd.test.getAJWGridDataquot;> <ext:config path=quot;/ext-2.2quot; /> <html> <head> <title>Design-focused Development: ExtJS Grid Examples</title> </head> <body> <ext:grid datastore=quot;stocksquot; title=quot;Array Gridquot; stripeRows=quot;truequot; autofill=quot;falsequot; width=quot;600quot; height=quot;350quot;> <ext:gridColumn header=quot;Companyquot; width=quot;265quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;Pricequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;% Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;Last Updatedquot; width=quot;85quot; type=quot;datequot; dateFormat=quot;n/j h:iaquot; sortable=quot;truequot; /> </ext:grid> </body> </html>
  • 70. Design-focused version Ajax Navigation <ewd:config fetchMethod=quot;ewd.test.getAJWGridDataquot;> <ext:config path=quot;/ext-2.2quot; /> •Event <ewd:xhtml> •Next Fragment <head> <title>Design-focused Development: ExtJS Grid Examples</title> •Target ID <script language=quot;javascriptquot;> function moveOn(currentRecord,currentRow) { var nvp=quot;record=quot; + currentRecord ; ewd.ajaxRequest(quot;myNextPagequot;,quot;myTargetDivquot;,nvp); } </script> </head> <body> <ext:grid datastore=quot;stocksquot; title=quot;Array Gridquot; stripeRows=quot;truequot; autofill=quot;falsequot; width=quot;600quot; height=quot;350“ onRowSelect=quot;moveOnquot;> <ext:gridColumn header=quot;Companyquot; width=quot;265quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;Pricequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;% Changequot; type=quot;floatquot; width=quot;75quot; sortable=quot;truequot; /> <ext:gridColumn header=quot;Last Updatedquot; width=quot;85quot; type=quot;datequot; dateFormat=quot;n/j h:iaquot; sortable=quot;truequot; /> </ext:grid> </body> </ewd:xhtml>
  • 71. The “A” Team • Designer stays in control throughout the lifecyle • Designer doesn’t need to have any knowledge of programming, business logic or database structure/content • Programmer just focuses on business logic to fetch/validate/process/save data – doesn’t waste any time on the “plumbing” – Isolated from design issues – Standardised processes – Discipline occurs because it’s the line of least resistance during development
  • 72. Design-focused Development • Proven benefits: – Much higher productivity compared with conventional techniques – Applications are focused on design requirements • designer retains control throughout the life-cycle – Cuts out all the complexity of Ajax – Integrates with most UI/widget libraries • Leverage “best of breed” instead of reinventing wheels – Significantly lower maintenance than conventional techniques • Because you just describe the what, not the how • Build an “A” team, not an “eh?” team!
  • 73. Conclusions • The programmer-focused approach has had its day • Design, not programming, must take centre-stage • None of the main industry players have a solution • It’s not just theory • Come and see how it can be done!