Date post: | 18-May-2015 |
Category: |
Technology |
Upload: | jerry-richardson |
View: | 2,132 times |
Download: | 0 times |
Selected Sessions from RailsConf 2007Jerry Richardson, [email protected]
Chief Technologist, iBlinkink
Clean Code
• incremental improvement
• always check code in better than you checked it out
• never let the sun set on bad code
• test first => "test obsessed"
• provides the necessary flexibility
Robert Martin
“I am not allowed to make a change that breaks the
system. Every tiny change I make will keep that system
working.”
Let’s Refactor
• Principle of least surprise
• tiny steps => change each variable type, then run the tests
• shrink the granularity of your development
• create a barrier between things that change and things that don't
Is it worth it?
• crafting good solutions
• clean it up as soon as it gets messy => the dinner parable: get up and walk away from the dinner table or keep your dishes clean all the time
• bad schedules, requirements, team dynamics can all be fixed but bad code rots, ferments and becomes an inexorable weight that drags the team down.
Professional Behavior
• The "Green Band"
• Professionals write their tests first
• Professionals keep their code clean
• Professionals know that the only way to go fast is to go well.
• making things a little bit nicer => the check-in rule
Doing REST RightRecognize rest principles in what you're
already doing. Apply them to your whole process.
Orthodoxy (right teaching, right beliefs, right thoughts) versus Orthopraxy
(right practice)
Orthodoxy
• Roy Fielding's Thesis defined REST (Representational State Transfer)
• All models are wrong but some are useful. - George Box
• Leaky Abstractions
• Diagrams are wrong but useful in representing complex, real-world systems. Same thing with abstractions.
REST isn’t...
• Pretty URLs
• CRUD
• respond_to
• map.resources
• a protocol - http
• an architecture
REST is...
• the architectural style of the web
• Roy Fielding's Hierarchy
• Abstract => Communication Theory
• REST
• Web Architecture
• Concrete => Implementation
REST is...
• A resource is anything that can be named
• A resource is an object with a couple of contraints - can only implement a very small number of methods, same for all resources
• you don't access a resource -- you access a representation of it. (respond_to with format.xml, format.txt, etc.)
Orthopraxy
• Identification - URL
• Interaction (Method or Verb)
• Safety - has no side effects, incurs no obligations (get is the only method that is safe by definition)
• idempotent -- applying a function once returns the same value as applying it multiple times (get, put and delete)
Post
• post is neither safe nor idempotent => reserve it for when you need it
Content, Body of Request
• REST pushes all of the complexity into content, out of identification and interaction
• messages should be use standards and be self-descriptive, like html
• look for content types that map to your application domain - instead of to_xml, use an established type for users => do vcard instead of your arbitrary user xml
Adding Tests to Legacy Rails AppsMost first-time Rails apps are built
before a developer understands their importance. Testing is painful in many frameworks and ignored when many
people switch to using rails.
Starting
• Don't do it all at once. It won't work.
• first, run rake
• mysqladmin -u root create appname_test
• Use Migrations
• Scaffolding is broken => those tests don't work.
One Step at a Time
• find a bug, write a test
• refactor a method, write a test
• treat each method as a box - don't get pulled in to testing everything
• test one thing at a time
• Test: what goes in? what comes out? (returning something in the method)
Rake or Direct Testing
• rake or direct testing
• rake testing: rake test:uncommitted
• direct: ruby test_file.rb -n test_name to run one test in a specific file
Build Tests from Logs
• Parameters then reproduce actual requests.
What To Test
• right response code
• correct template
• variable assignment
• assignment of desired object
Questions?
Me.
Image Credits• DHH
http://flickr.com/photos/x180/503574487/
• Robert Martinhttp://flickr.com/photos/x180/503608084/
• Scott Raymondhttp://flickr.com/photos/keeg/511239686/
• Evan (Rabble) Henshaw-Plathhttp://flickr.com/photos/x180/474128166/
• Mehttp://flickr.com/photos/jackdanger/502998700/