ruby object design

35
Ruby Object Design

Upload: eddie-lee

Post on 12-Jul-2015

106 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Ruby Object Design

Ruby Object Design

Page 2: Ruby Object Design

Eddie Li (ADZ)

[email protected]

http://adz.visionbundles.com

Github: afunction

Facebook: /adz.624

Page 3: Ruby Object Design

A difference between Ruby object and other languages

Page 4: Ruby Object Design

1. syntax omission

Page 5: Ruby Object Design
Page 6: Ruby Object Design
Page 7: Ruby Object Design
Page 8: Ruby Object Design
Page 9: Ruby Object Design
Page 10: Ruby Object Design

Cons

1. Make your codes more readable to a human. (model validation, routes, rspec, view helper)

Pros

1. High learning curve for beginners. (Easy to misunderstanding)

Page 11: Ruby Object Design

2. No REAL propertyclass/instance variables

and method instead.

Page 12: Ruby Object Design

attr_accessor / attr_reader / attr_writer

Page 13: Ruby Object Design

Access via class/instance variable

Page 14: Ruby Object Design
Page 15: Ruby Object Design

3. Operator is also a methodmagic!

Page 16: Ruby Object Design
Page 17: Ruby Object Design

def +def -def *def /

def << def ==

def ===

Page 18: Ruby Object Design

4. Open Class

Page 19: Ruby Object Design
Page 20: Ruby Object Design

5. Meta-programming

Generate code … by code

Page 21: Ruby Object Design

wrapper abstraction behavior

Page 22: Ruby Object Design

Pros

1. Split logics to different level and make your business logic clean.2. Increase productive.3. Follow DRY code principle like there is no limitation.

Page 23: Ruby Object Design

Cons

1. Hard to maintain (but it can be solve)2. Hard to name variables and methods for abstraction behavior.3. Hard to understand abstraction behavior codes from time to time.

Page 24: Ruby Object Design

class_evaldefine_method

define_singleton_method

Page 25: Ruby Object Design

6. module & classlike PHP Traits

multi inheritancebreak top down inheritance

Page 26: Ruby Object Design

a. DRY duplicate method

Page 27: Ruby Object Design

b. callback when some class included

“base” means the class that include this module.

Page 28: Ruby Object Design

It can help you…

1. Modular behavior2. Modular abstraction behavior with meta-programming3. Reduce code duplication

Page 29: Ruby Object Design

Pros

1. Easy to organize a huge/fat class2. Design/extend object flexible

Page 30: Ruby Object Design

Cons

1. Hard to read and write unit-test (when modules with high dependent context)

2. Hight learning curve3. Easy to misleading

Page 31: Ruby Object Design

7. skip “private, protected” method protection

Page 32: Ruby Object Design

“send” method will skip “private, protected

Page 33: Ruby Object Design

combine send and include method with module

extend class outside without changing exists code.

Page 34: Ruby Object Design

Live Coding.aka Demo!

Page 35: Ruby Object Design

Q&A Thank you.