taming the view for rubyconf india

Post on 12-May-2015

1.506 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Taming of the ViewRubyConf India 2010Sarah Taraporewalla

ThoughtWorks

Sunday, 21 March 2010

I will attempt to convince you that:

Sunday, 21 March 2010

I will attempt to convince you that:

- the current template engines are too permissive

Sunday, 21 March 2010

I will attempt to convince you that:

- the current template engines are too permissive

- there are loads of code bases that break fundamental principles

Sunday, 21 March 2010

I will attempt to convince you that:

- the current template engines are too permissive

- there are loads of code bases that break fundamental principles

- you should turn to other template engines

Sunday, 21 March 2010

What is wrong with these examples?

Sunday, 21 March 2010

Example 1

Sunday, 21 March 2010

Example 2

Sunday, 21 March 2010

Example 3

Sunday, 21 March 2010

Example 4

Sunday, 21 March 2010

AGH! This is really really easy in Rails3

now!

Sunday, 21 March 2010

Controller

Sunday, 21 March 2010

Why do we get thin controllers?

Sunday, 21 March 2010

Push vs Pull

http://www.flickr.com/photos/91772025@N00/444044158/ CC BY-ND 2.0

Sunday, 21 March 2010

Pull

View Controllers Model

Sunday, 21 March 2010

Pull - over time

ViewControllers Model

Sunday, 21 March 2010

Push

View Controllers Model

Sunday, 21 March 2010

Push - over time

View

Controllers

Model

Sunday, 21 March 2010

Push - and then

View Controllers Services

Sunday, 21 March 2010

What do we want?

Sunday, 21 March 2010

Testable Code

Sunday, 21 March 2010

Testable Code

Don’t put logic in your views

Sunday, 21 March 2010

Single Responsibility

Sunday, 21 March 2010

Single Responsibility

Don’t let changes in column names effect your views

Sunday, 21 March 2010

Separation of Concerns

Sunday, 21 March 2010

Separation of Concerns

Enforce strict separation of model and view

Sunday, 21 March 2010

How do we improve on the examples?

Sunday, 21 March 2010

Example 1 - Before

Sunday, 21 March 2010

Example 1 - Improved

Sunday, 21 March 2010

Example 2 - Before

Sunday, 21 March 2010

Example 2 - Improved

Sunday, 21 March 2010

Example 2 - Improved

Sunday, 21 March 2010

Example 3 - Before

Sunday, 21 March 2010

Example 4 - Before

Sunday, 21 March 2010

Example 3,4 - Improved

Sunday, 21 March 2010

Example 3,4 - Improved

Sunday, 21 March 2010

If you make it easy to do the wrong thing, the

wrong thing will be done

Sunday, 21 March 2010

If you make it easy to do the right thing, the

right thing will be done

Sunday, 21 March 2010

Haml

Sunday, 21 March 2010

Haml

Sunday, 21 March 2010

Haml

Good

Sunday, 21 March 2010

Haml

Good

But ...

Sunday, 21 March 2010

Haml

Good

But ...

still allows ruby

Sunday, 21 March 2010

String Template

Sunday, 21 March 2010

StringTemplate

- Strict separation of model & view

- Fits well with functional programming

- Written in Java, .Net, Python

is NOT Turing complete

Sunday, 21 March 2010

1. Create a StringTemplate Object with the template

Sunday, 21 March 2010

1. Create a StringTemplate Object with the template

string or file

Sunday, 21 March 2010

2. Set attributes and their values

Sunday, 21 March 2010

3. Call toString() to mash attributes onto the template

Sunday, 21 March 2010

Testable?

Sunday, 21 March 2010

Testable? Yes!

Sunday, 21 March 2010

Single Responsibility?

Sunday, 21 March 2010

Single Responsibility? Yes!

Sunday, 21 March 2010

Separation of Concerns?

Sunday, 21 March 2010

Separation of Concerns? Yes!

It is the essence of its philosophy

Sunday, 21 March 2010

Other cool things...

Sunday, 21 March 2010

Templates (Partials)

Sunday, 21 March 2010

Iterators

Sunday, 21 March 2010

Iterators

Sunday, 21 March 2010

Renderers

Sunday, 21 March 2010

Localisation

Sunday, 21 March 2010

But, we do Ruby

Sunday, 21 March 2010

Slippers

Sunday, 21 March 2010

Slippers

Sunday, 21 March 2010

Slippers & Ramaze

Sunday, 21 March 2010

Slippers - Example

Sunday, 21 March 2010

Slippers - Example

Sunday, 21 March 2010

Slippers - Example

Sunday, 21 March 2010

Slippers - Exampleindex.st

person/index.st

person/age.stSunday, 21 March 2010

Slippers - Exampleperson/age_renderer.rb

controller/role_renderer.rb

Sunday, 21 March 2010

Slippers - Example

Sunday, 21 March 2010

Slippers - Testable?

• Holes are correctly plugged

• Correct instance variables set

• Renderers

Sunday, 21 March 2010

• Holes are correctly plugged

• Correct instance variables set

• Renderers

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

• Holes are correctly plugged

• Correct instance variables set

• Renderers

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

• Holes are correctly plugged

• Correct instance variables set

• Renderers

Slippers - Testable?

Sunday, 21 March 2010

Slippers - Testable?

Sunday, 21 March 2010

Slippers

Sunday, 21 March 2010

Slippers

• Can be found at:

‣ http://slippersRb.com

‣ http://github.com/starapor/slippers

‣ http://gemcutter.org/gems/slippers

• Ramaze view template

‣ http://ramaze.net

Sunday, 21 March 2010

Have I convinced you that:

Sunday, 21 March 2010

Have I convinced you that:

- the current template engines are too permissive

Sunday, 21 March 2010

Have I convinced you that:

- the current template engines are too permissive

- there are loads of code bases that break fundamental principles

Sunday, 21 March 2010

Have I convinced you that:

- the current template engines are too permissive

- there are loads of code bases that break fundamental principles

- we should turn to other template engines

Sunday, 21 March 2010

questions?

Sunday, 21 March 2010

top related