Transcript
Page 1: Component Based Development

Component Based Development

Ben McCormick Software Developer at Windsor Circle

Twitter: @ben336 benmccormick.org

Page 2: Component Based Development

So What Is Component Based Development?

Page 3: Component Based Development

Quick Web History Lesson

1995-1996: Netscape and IE Introduce JavaScript

2000 - 2005: AJAX allows for Rich Web Applications

2006-2008: jQuery lowers the barriers to Web Development

2010-2013: MVC Frameworks & Single Page Apps explode

2014?: Component Based Development enters the scene

2009-2013: NodeJS and DevTools create a “Tools Revolution”

Page 4: Component Based Development

Component Based Development

A Front End Development approach focused on reusable, composable elements with an

abstracted, semantic public interface

Page 5: Component Based Development

Component Based Development

Reusable

Composable

Abstracted

Semantic

Page 6: Component Based Development

Motivation

Reusable front-end code is hard

Single points of truth make development easier

We’re losing readable markup

Side Effects make scaling hard

Page 7: Component Based Development

Web Components

Official W3C Spec

Complete implementation in Chrome now

Partial implementation in Firefox

Page 8: Component Based Development

Custom Elements

Templates HTML Imports

Shadow DOM

Page 9: Component Based Development
Page 10: Component Based Development

<progress-bar value =“30”></progress-bar>

Page 11: Component Based Development

Custom Elements

Let you register an element with the browser

Are “just” HTML elements

Provide a set of callbacks to define element behavior

Expose a public interface (attributes and properties)

Page 12: Component Based Development

Custom Element Life-Cycle

createdCallback

attachedCallback

detachedCallback

attributeChangedCallback

Page 13: Component Based Development

Custom Elements

Templates HTML Imports

Shadow DOM

Page 14: Component Based Development

Shadow DOM

Provides Encapsulation of styles and selectors

Prevents naming conflicts and related errors

Can be overridden when necessary

Page 15: Component Based Development

Shadow Dom API

createShadowRoot()

::shadow

<content></content>

Page 16: Component Based Development

Custom Elements

Templates HTML Imports

Shadow DOM

Page 17: Component Based Development

Templates

As Simple as <template></template>

Reusable DOM Chunks

No side effects

Page 18: Component Based Development

Custom Elements

Templates HTML Imports

Shadow DOM

Page 19: Component Based Development

HTML Imports

<link rel=“import” href=“example.html”>

Allow you to load HTML like CSS and JS

Can load chains of resources including scripts and styles

Only parsed once, solving dependency issues

Page 20: Component Based Development

The Bad News

Page 21: Component Based Development

Compatibility

http://jonrimmer.github.io/are-we-componentized-yet/

Page 22: Component Based Development

The Here And Now

Page 23: Component Based Development

Polymer

Knockout Ember

React

Page 24: Component Based Development

Polymer

Web Components +

Polyfills for the WC spec

Also includes helper methods and it’s own syntax for creating components

“Everything is an element”

Page 25: Component Based Development

Polymer

Just Web Components

Easy transition to the “future”

Backed by Google

Polyfills large/incomplete

Performance is a concern on polyfilled browsers

Page 26: Component Based Development

Polymer

Knockout Ember

React

Page 27: Component Based Development

My Most Popular Tweet Ever

Page 28: Component Based Development

React

An alternative components implementation

Focused on UI (the V in MVC)

Uses a virtual DOM to track changes

Page 29: Component Based Development

React

Focus on composable components

Take “state”, produce a section of UI

Challenges best practices: Combines markup and Javascript, rerenders the whole page on each change

Page 30: Component Based Development

Polymer

Knockout Ember

React

Page 31: Component Based Development

Knockout

Released in 2010

Recently added components as a recommended development style

Inspired by, but not strictly following Web Component Syntax

Page 32: Component Based Development

Polymer

Knockout Ember

React

Page 33: Component Based Development

Ember

Released in 2011

Provide a Web Component-like API based on Handlebars

Meant to ease the transition to Web Components in the future.

Page 34: Component Based Development

Component Based Development Today

Component Libraries like React and Polymer

Component Influenced Libraries like Knockout and Ember

Polyfills to use Web Components in today’s browsers

Page 35: Component Based Development

Component Based Development Tomorrow

Web Components

3rd Party Libraries

Page 36: Component Based Development

Possibilities

Truly Reusable Code

Readable, Meaningful Markup

Simple to use widgets without side-effects

Page 37: Component Based Development

Thank YouBen McCormick Windsor Circle

@ben336 benmccormick.org


Recommended