writing modular java script

29
Writing Modular JavaScript by Volodymyr Pavlyuk October 2013

Upload: it-weekend

Post on 10-May-2015

833 views

Category:

Technology


2 download

DESCRIPTION

by Volodymyr Pavlyuk Why do we need this? Code reuse Better maintainability Better flexibility Easier to test Even big application doesn’t look very complex

TRANSCRIPT

Page 1: Writing modular java script

Writing Modular JavaScript

by Volodymyr Pavlyuk

October 2013

Page 2: Writing modular java script

Why do we need this?

• Code reuse• Better maintainability• Better flexibility• Easier to test• Even big application doesn’t look very

complex

Page 3: Writing modular java script

What is a Module?

Page 4: Writing modular java script
Page 5: Writing modular java script
Page 6: Writing modular java script
Page 7: Writing modular java script
Page 8: Writing modular java script
Page 9: Writing modular java script
Page 10: Writing modular java script

Module is…

..an independent unit of functionality that is part of the total structure of a web application. Module consists of HTML + CSS + JavaScript.

Page 11: Writing modular java script

Module vs. Widget

• Widget doesn’t have business value, it’s dumb.

• Module does.

Page 12: Writing modular java script

{demo}

Page 13: Writing modular java script

Modularity is not about single-page applications or AMD…

Page 14: Writing modular java script

… it’s all about loose coupling

Page 15: Writing modular java script

Loose coupling

• Reduce interfaces• Use mediator

Page 16: Writing modular java script

Interface → Tight coupling

Page 17: Writing modular java script

MessageBus

Mediator

Module Module Module Module

Page 18: Writing modular java script

define('Mediator', function() { var eventsMap = [];   var Mediator = function() {};  

Mediator.prototype.on = function(ev, fn){ /* Add event listener to the map */ };   Mediator.prototype.fire = function(ev, payload){ /* Call listener */ };

return Mediator; });

Page 19: Writing modular java script

define('foo', function() {   function stopDropAndRoll() { /* Aaaa!! We all gonna die! */ }   return { init: function (mediator) { mediator.on('Earthquake', stopDropAndRoll); } } });

Page 20: Writing modular java script
Page 21: Writing modular java script

define('bar', function() { return { init: function (mediator) { setTimeout(function() { mediator.fire('Earthquake'); }, 1000) } } });

Page 22: Writing modular java script

require([‘Mediator', 'foo', 'bar'], function(Mediator, foo, bar) {

  foo.init(new Mediator()); bar.init(new Mediator());  

});

Page 23: Writing modular java script

Mediator

• It provides consistency• It provides security• It provides communication

Page 24: Writing modular java script

Module

• Only call your own methods or those on the mediator

• Don’t access DOM elements outside of your box• Don’t access non-native global objects• Anything else you need, ask the mediator• Don’t create global objects• Don’t directly reference other modules

Page 25: Writing modular java script

What about JavaScript libraries?

You are free to use any library or framework you want if loose coupling is preserved.

Page 26: Writing modular java script

Does this work for really large applications?

Yes.

Page 27: Writing modular java script

Such pattern is very useful for embedding legacy code

Page 28: Writing modular java script

define(‘uglyJQueryCode', function() {  

/* Legacy code */ return { init: function (mediator) { /* Facade */ } } });

Page 29: Writing modular java script

Questions?