from big to massive – scalability in angularjs applications

36
FROM BIG TO MASSIVE SCALABILITY IN ANGULARJS APPLICATIONS

Upload: sebastian-froestl

Post on 16-Jul-2015

271 views

Category:

Software


0 download

TRANSCRIPT

Page 1: From Big to Massive – Scalability in AngularJS Applications

FROM BIG TO MASSIVESCALABILITY IN ANGULARJS APPLICATIONS

Page 2: From Big to Massive – Scalability in AngularJS Applications

GERNOT HÖFLECHNER & SEBASTIAN FRÖSTLSMIMP.IO

Page 3: From Big to Massive – Scalability in AngularJS Applications

WHAT MAKES CODE SCALABLE?

Page 4: From Big to Massive – Scalability in AngularJS Applications

▸ Separation of Concerns

Page 5: From Big to Massive – Scalability in AngularJS Applications

▸ Testability

Page 6: From Big to Massive – Scalability in AngularJS Applications

▸ Easy to add functionality

Page 7: From Big to Massive – Scalability in AngularJS Applications

▸ Reacts well to changing requirements

Page 8: From Big to Massive – Scalability in AngularJS Applications

ANGULARJS DOES OFFER A LOT!

Page 9: From Big to Massive – Scalability in AngularJS Applications

▸ Directives▸ Services▸ Events

▸ Scope hierarchy▸ 2 way data binding

Page 10: From Big to Massive – Scalability in AngularJS Applications

BUT THIS IS ALSO PART OF THE PROBLEM!

Page 11: From Big to Massive – Scalability in AngularJS Applications
Page 12: From Big to Massive – Scalability in AngularJS Applications

HOW TO PROPERLY USE THESE COMPONENTS?

Page 13: From Big to Massive – Scalability in AngularJS Applications

EXAMPLE▸ Display and manage some items

Page 14: From Big to Massive – Scalability in AngularJS Applications

.directive('myItems', function() { return { scope: { items: '=' }, controller: function ($scope, $http) {

$scope.delete = function (item) { $http .delete(/* code */) .then(function (resp) { $scope.items.splice(/* code */); }); } } };});

Page 15: From Big to Massive – Scalability in AngularJS Applications

.directive('myItems', function() { return { scope: { /* scope interface */}, controller: function ($scope, $http, NotificationService) { $scope.delete = function () { $http .delete(/* code */) .then(function () { $scope.items.splice(/* code */); //remove items $scope.$emit(/* event */) // emit to other components NotificationService.push(/* code */) // more code here }); } } };});

Page 16: From Big to Massive – Scalability in AngularJS Applications

LOOKS CLEAN AND ENCAPSULATED, RIGHT?

Page 17: From Big to Massive – Scalability in AngularJS Applications

.directive('myItems', function() { return { scope: { /* scope interface here */}, controller: function ($scope, $http, NotificationService) { $scope.delete = function () { $http .delete(/* code */) .then(function () { $scope.items.splice(); //remove items $scope.$emit() // emit to other components (or $rootScope) NotificationService.push(/* code */) // more code here }); } } };});

Page 18: From Big to Massive – Scalability in AngularJS Applications

PROBLEMS

Page 19: From Big to Massive – Scalability in AngularJS Applications

▸ Stateful▸ Not really reusable

▸ Too many responsibilities

Page 20: From Big to Massive – Scalability in AngularJS Applications
Page 21: From Big to Massive – Scalability in AngularJS Applications
Page 22: From Big to Massive – Scalability in AngularJS Applications

WHAT CONCEPTS CAN HELP US?

▸ Micro-Services▸ Functional programming

▸ Unidirectional data flow (flux)

Page 23: From Big to Massive – Scalability in AngularJS Applications
Page 24: From Big to Massive – Scalability in AngularJS Applications

LET'S DO IT BETTER!

Page 25: From Big to Massive – Scalability in AngularJS Applications

.service('ItemStore', function() { var items = {};

this.remove = remove;

function remove(item) { delete items[item.id]; emit('remove', item); }});

Page 26: From Big to Massive – Scalability in AngularJS Applications

.service('ItemRemoveService', function($http, ItemStore) {

this.remove = remove;

function remove(item) { return $http .delete(/* code */) .then(function (res) { ItemStore.remove(res.data); }); }});

Page 27: From Big to Massive – Scalability in AngularJS Applications

.directive('myItems', function() { return { controller: function ($scope, ItemStore) { ItemStore.on('remove', init); // Listen on store events

init();

function init() { scope.items = ItemStore.getAll(); } } };});

Page 28: From Big to Massive – Scalability in AngularJS Applications

.directive('myItem', function() { return { controller: function ($scope, ItemRemoveService) { $scope.remove = remove;

function remove() { ItemRemoveService.remove($scope.item); } } };});

Page 29: From Big to Massive – Scalability in AngularJS Applications
Page 30: From Big to Massive – Scalability in AngularJS Applications
Page 31: From Big to Massive – Scalability in AngularJS Applications

APPLIED TO ANGULARJS▸ Injectable state and updates▸ Injectable actions

▸ Directives that just use services and display data

Page 32: From Big to Massive – Scalability in AngularJS Applications
Page 33: From Big to Massive – Scalability in AngularJS Applications
Page 34: From Big to Massive – Scalability in AngularJS Applications

OUTLOOK

▸ Make it all immutable▸ Easier migration to Angular 2.0

Page 35: From Big to Massive – Scalability in AngularJS Applications

THANK YOU!

GERNOT HÖFLECHNER & SEBASTIAN FRÖSTLSMIMP.IO

Page 36: From Big to Massive – Scalability in AngularJS Applications