Minimal MVC in JavaScript

88
MINIMAL MVC IN JAVASCRIPT MOSKY

description

It introduces a way to implement a minimal MVC in JavaScript. This is the talk @ OSDC 2014. [1]: http://osdc.tw/2014/

Transcript of Minimal MVC in JavaScript

Page 1: Minimal MVC in JavaScript

MINIMAL MVC IN JAVASCRIPTMOSKY

Page 2: Minimal MVC in JavaScript

MOSKY

2

Page 3: Minimal MVC in JavaScript

MOSKY

• Python Charmer at Pinkoi

2

Page 4: Minimal MVC in JavaScript

MOSKY

• Python Charmer at Pinkoi

• An author of some Python packages

2

Page 5: Minimal MVC in JavaScript

MOSKY

• Python Charmer at Pinkoi

• An author of some Python packages

• A speaker of some confs, PyCon TW/JP mostly

2

Page 6: Minimal MVC in JavaScript

MOSKY

• Python Charmer at Pinkoi

• An author of some Python packages

• A speaker of some confs, PyCon TW/JP mostly

• A Python instructor

2

Page 7: Minimal MVC in JavaScript

MOSKY

• Python Charmer at Pinkoi

• An author of some Python packages

• A speaker of some confs, PyCon TW/JP mostly

• A Python instructor

• mosky.tw

2

Page 8: Minimal MVC in JavaScript

MOSKY

3

Page 9: Minimal MVC in JavaScript

MOSKY

• “Uh … Python …?”

3

Page 10: Minimal MVC in JavaScript

MOSKY

• “Uh … Python …?”

• Yes, but, today I am going to talk about JavaScript.

3

Page 11: Minimal MVC in JavaScript

MOSKY

• “Uh … Python …?”

• Yes, but, today I am going to talk about JavaScript.

• kind of thinking FE from BE aspect.

3

Page 12: Minimal MVC in JavaScript

OUTLINE

4

Page 13: Minimal MVC in JavaScript

OUTLINE

• What is MVC?

4

Page 14: Minimal MVC in JavaScript

OUTLINE

• What is MVC?

• Status Quo

4

Page 15: Minimal MVC in JavaScript

OUTLINE

• What is MVC?

• Status Quo

• Make It Better in Minimal Cost

4

Page 16: Minimal MVC in JavaScript

OUTLINE

• What is MVC?

• Status Quo

• Make It Better in Minimal Cost

• Conclusion

4

Page 17: Minimal MVC in JavaScript

WHAT IS MVC?

Page 18: Minimal MVC in JavaScript

6

Page 19: Minimal MVC in JavaScript

6

Model

Page 20: Minimal MVC in JavaScript

6

View

Model

Page 21: Minimal MVC in JavaScript

6

View

Model

Controller

Page 22: Minimal MVC in JavaScript

6

View

Model

Controller

User

Page 23: Minimal MVC in JavaScript

6

View

Model

Controller

User Uses

Page 24: Minimal MVC in JavaScript

6

View

Model

Controller

User

Manipulates

Uses

Page 25: Minimal MVC in JavaScript

6

View

Model

Controller

User

Update Manipulates

Uses

Page 26: Minimal MVC in JavaScript

6

View

Model

Controller

User

Update

Sees

Manipulates

Uses

Page 27: Minimal MVC in JavaScript

6

View

Model

Controller

User

Update

Sees

Manipulates

Uses

Sync

Page 28: Minimal MVC in JavaScript

7

Page 29: Minimal MVC in JavaScript

7

Page 30: Minimal MVC in JavaScript

7

Manipulates

Page 31: Minimal MVC in JavaScript

7

Manipulates

Updates

Page 32: Minimal MVC in JavaScript

8

View

Model

Controller

User

Update

Sees

Manipulates

Uses

Sync

Page 33: Minimal MVC in JavaScript

STATUS QUO

Page 34: Minimal MVC in JavaScript

10

Page 35: Minimal MVC in JavaScript

10

DOM(View)

JS(Controller)

User

Page 36: Minimal MVC in JavaScript

10

DOM(View)

JS(Controller)

User Uses

Page 37: Minimal MVC in JavaScript

10

DOM(View)

JS(Controller)

User

Data

Uses

Page 38: Minimal MVC in JavaScript

10

DOM(View)

JS(Controller)

User

Data

Uses

Sync

Page 39: Minimal MVC in JavaScript

10

DOM(View)

JS(Controller)

User

Data

Uses

Sync

Update

Page 40: Minimal MVC in JavaScript

10

DOM(View)

JS(Controller)

UserSees

Data

Uses

Sync

Update

Page 41: Minimal MVC in JavaScript

UPDATE FROM SERVER DATA

Page 42: Minimal MVC in JavaScript

UPDATE FROM SERVER DATA

{ k1: "…", k2: "…", k3: "…"}

Data from Server

Page 43: Minimal MVC in JavaScript

UPDATE FROM SERVER DATA

{ k1: "…", k2: "…", k3: "…"}

Data from Server

K1

M

Show to User

Page 44: Minimal MVC in JavaScript

UPDATE FROM SERVER DATA

{ k1: "…", k2: "…", k3: "…"}

Data from Server

K1

M

Show to User

1:1

Page 45: Minimal MVC in JavaScript

UPDATE FROM SERVER DATA

{ k1: "…", k2: "…", k3: "…"}

Data from Server

K1

M

Show to User

1:1

N:1

Page 46: Minimal MVC in JavaScript

UPDATE FROM SERVER DATA

{ k1: "…", k2: "…", k3: "…"}

Data from Server

K1

M

Show to User

1:1

N:1

Nothing

Page 47: Minimal MVC in JavaScript

GET DATA FROM DOM

Page 48: Minimal MVC in JavaScript

GET DATA FROM DOM

K1

M

After Modifying

Page 49: Minimal MVC in JavaScript

GET DATA FROM DOM

{ k1: "…", k2: "…", k3: "…"}

Data to Server

K1

M

After Modifying

Page 50: Minimal MVC in JavaScript

GET DATA FROM DOM

{ k1: "…", k2: "…", k3: "…"}

Data to Server

K1

M

After Modifying

1:1

Page 51: Minimal MVC in JavaScript

GET DATA FROM DOM

{ k1: "…", k2: "…", k3: "…"}

Data to Server

K1

M

After Modifying

1:1

N:1

Page 52: Minimal MVC in JavaScript

GET DATA FROM DOM

{ k1: "…", k2: "…", k3: "…"}

Data to Server

K1

M

After Modifying

1:1

N:1

Nothing

Page 53: Minimal MVC in JavaScript

GET DATA FROM DOM

{ k1: "…", k2: "…", k3: "…"}

Data to Server

K1

M

After Modifying

1:1

N:1

Nothing

Code, code, code!

Page 54: Minimal MVC in JavaScript

GET DATA FROM DOM

{ k1: "…", k2: "…", k3: "…"}

Data to Server

K1

M

After Modifying

1:1

N:1

Nothing

Code, code, code!

From nothing!

Page 55: Minimal MVC in JavaScript

13

DOM(View)

JS(Controller)

UserSees

Data

Uses

Sync

Update

Page 56: Minimal MVC in JavaScript

MAKE IT BETTER IN MINIMAL COST

Page 57: Minimal MVC in JavaScript

15

View Controller

UserSees Uses

Page 58: Minimal MVC in JavaScript

15

View Controller

UserSees Uses

ModelUpdate Manipulates

Sync

Page 59: Minimal MVC in JavaScript

15

View Controller

UserSees Uses

ModelUpdate Manipulates

Sync

Make all 1:1!

Page 60: Minimal MVC in JavaScript

THE RECIPE

16

Page 61: Minimal MVC in JavaScript

THE RECIPE

• Use Class in JavaScript;

16

Page 62: Minimal MVC in JavaScript

THE RECIPE

• Use Class in JavaScript;

• Write 3 methods as Model, View, and Controller

16

Page 63: Minimal MVC in JavaScript

THE RECIPE

• Use Class in JavaScript;

• Write 3 methods as Model, View, and Controller

• Make function call as message passing

16

Page 64: Minimal MVC in JavaScript

THE RECIPE

• Use Class in JavaScript;

• Write 3 methods as Model, View, and Controller

• Make function call as message passing

• Message is what changed.

16

Page 65: Minimal MVC in JavaScript

THE RECIPE

• Use Class in JavaScript;

• Write 3 methods as Model, View, and Controller

• Make function call as message passing

• Message is what changed.

• And the util-level libs you love.

16

Page 66: Minimal MVC in JavaScript

THE RECIPE

• Use Class in JavaScript;

• Write 3 methods as Model, View, and Controller

• Make function call as message passing

• Message is what changed.

• And the util-level libs you love.

• (My favor is just JQuery and Underscore.js)

16

Page 67: Minimal MVC in JavaScript

THE CONSTRUCTOR

var Clock = function (obj) {

! /* Model */

this._model = {};

! /* View */

this.$view = $(Clock.template);

this.$i = $this.view.find('.i');

this.$o = $this.view.find('.o');

// ...

!!

/* Controller */

var _this = this;

this.$view.on('change', '.i', function () {

_this.controller('i-changed');

});

// ...

! // Apply defaults

this.model(obj);

};

17

Page 68: Minimal MVC in JavaScript

THE MODEL

Clock.prototype.model = function (model_changes) {

! // First, optionally filter the fake changes out.

! // Second, asyncly send the changes to server;

// and update model/view by the response.

! // Finally, update the changes into this._model.

! this.view(view_changes);

};

18

Page 69: Minimal MVC in JavaScript

THE VIEW

Clock.prototype.view = function (view_changes) {

!

// Pattern I

if (view_changes.o !== undefined) {

this.$o.val(view_changes.o);

}

!

// Pattern II

this.$n.val(this._model.o);

};

19

Page 70: Minimal MVC in JavaScript

THE CONTROLLER

Clock.prototype.controller = function (event_name) {

switch (event_name) {

case 'i-changed':

this.model({o: _this.$i.val()});

break;

}

};

!

!

20

Page 71: Minimal MVC in JavaScript

21

View

Model

Controller

User

Update

Sees

Manipulates

Uses

Sync

Page 72: Minimal MVC in JavaScript

REAL CASES

22

Page 74: Minimal MVC in JavaScript

REAL CASES

• The Memo App

• https://github.com/moskytw/memo-app/blob/master/memo/static/memo.js

22

Page 75: Minimal MVC in JavaScript

REAL CASES

• The Memo App

• https://github.com/moskytw/memo-app/blob/master/memo/static/memo.js

• The Web for ZIPCodeTW

22

Page 76: Minimal MVC in JavaScript

REAL CASES

• The Memo App

• https://github.com/moskytw/memo-app/blob/master/memo/static/memo.js

• The Web for ZIPCodeTW

• https://github.com/moskytw/zipcodetw/blob/dev/web/static/finder.js

22

Page 77: Minimal MVC in JavaScript

REAL CASES

• The Memo App

• https://github.com/moskytw/memo-app/blob/master/memo/static/memo.js

• The Web for ZIPCodeTW

• https://github.com/moskytw/zipcodetw/blob/dev/web/static/finder.js

• http://zipcode.mosky.tw/

22

Page 78: Minimal MVC in JavaScript

CONCLUSION

Page 79: Minimal MVC in JavaScript

CONCLUSION

24

Page 80: Minimal MVC in JavaScript

CONCLUSION

• MVC is a powerful pattern, and not hard.

24

Page 81: Minimal MVC in JavaScript

CONCLUSION

• MVC is a powerful pattern, and not hard.

• Add model unit to simplify problem.

24

Page 82: Minimal MVC in JavaScript

CONCLUSION

• MVC is a powerful pattern, and not hard.

• Add model unit to simplify problem.

• Don’t be limited by the frameworks!

24

Page 83: Minimal MVC in JavaScript

THE LAST THING!

Page 84: Minimal MVC in JavaScript

PYCON APAC 2014 (IN TAIWAN)REGISTRATIONS ARE OPEN!

Page 85: Minimal MVC in JavaScript

CONCLUSION

27

Page 86: Minimal MVC in JavaScript

CONCLUSION

• MVC is a powerful pattern, and not hard.

• Add model unit to simplify problem.

• Don’t be limited by the frameworks!

27

Page 87: Minimal MVC in JavaScript

CONCLUSION

• MVC is a powerful pattern, and not hard.

• Add model unit to simplify problem.

• Don’t be limited by the frameworks!

• mosky.tw

27

Page 88: Minimal MVC in JavaScript

CONCLUSION

• MVC is a powerful pattern, and not hard.

• Add model unit to simplify problem.

• Don’t be limited by the frameworks!

• mosky.tw

• Any questions?

27