ruby object design (chinese)

35
淺談 ruby 物件設計

Upload: eddie-lee

Post on 12-Jul-2015

515 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Ruby Object Design (Chinese)

淺談 ruby 物件設計

Page 2: Ruby Object Design (Chinese)

Eddie Li (ADZ)

[email protected]

http://adz.visionbundles.com

Github: afunction

Facebook: /adz.624

Page 3: Ruby Object Design (Chinese)

Ruby 物件與其他語⾔言不同的地⽅方

Page 4: Ruby Object Design (Chinese)

1.語法省略

Page 5: Ruby Object Design (Chinese)
Page 6: Ruby Object Design (Chinese)
Page 7: Ruby Object Design (Chinese)
Page 8: Ruby Object Design (Chinese)
Page 9: Ruby Object Design (Chinese)
Page 10: Ruby Object Design (Chinese)

缺點

1. 程式碼更容易閱讀、更像⼈人類語⾔言(model validation, routes, rspec, view helper)

優點

1. 對初學者來說更⾼高的學習曲線(⾮非常容易誤解)

Page 11: Ruby Object Design (Chinese)

2. 沒有真正的 property

class/instance variables and

method instead.

Page 12: Ruby Object Design (Chinese)

attr_accessor / attr_reader / attr_writer

Page 13: Ruby Object Design (Chinese)

不過還是可以透過 class/instance variable 存取

Page 14: Ruby Object Design (Chinese)
Page 15: Ruby Object Design (Chinese)

3. 運算⼦子也是 methodmagic!

Page 16: Ruby Object Design (Chinese)
Page 17: Ruby Object Design (Chinese)

def +def -def *def /

def << def ==

def ===

Page 18: Ruby Object Design (Chinese)

4. Open Class

Page 19: Ruby Object Design (Chinese)
Page 20: Ruby Object Design (Chinese)

5. Meta-programming

⽤用程式寫程式

Page 21: Ruby Object Design (Chinese)

封裝抽象⾏行為

Page 22: Ruby Object Design (Chinese)

優點

1. 區隔不同 level 的邏輯,讓商業邏輯更乾淨。2. 沒有極限的增加⽣生產⼒力

Page 23: Ruby Object Design (Chinese)

缺點

1. 不容易維護 (但有解決⽅方法)2. 難以對抽象⾏行為的 method, variables 命名3. 有時候也難以了解閱讀程式碼

Page 24: Ruby Object Design (Chinese)

class_evaldefine_method

define_singleton_method

Page 25: Ruby Object Design (Chinese)

6. module & classPHP Traits多重繼承

打破上下繼承關係

Page 26: Ruby Object Design (Chinese)

a. DRY 重複的 method

Page 27: Ruby Object Design (Chinese)

b.當有 class include 這 module 時會呼叫 self.included

“base” 指的是誰 include 了這個 module

Page 28: Ruby Object Design (Chinese)

你可以⽤用 module …

1. 把共通⾏行為模組化 2. 搭配 meta-programming 把抽象⾏行為模組化 3. 減少程式碼重複

Page 29: Ruby Object Design (Chinese)

優點

1. 容易組織⼀一個⼤大型 class2. 更彈性的設計跟擴充物件

Page 30: Ruby Object Design (Chinese)

缺點

1. 難以閱讀和撰寫 unit-test(當模組間有⾼高度相依的 context 時)

2. ⾼高學習曲線3. 容易產⽣生程式碼誤解

Page 31: Ruby Object Design (Chinese)

7. 跳過 “private, protected” 保護

Page 32: Ruby Object Design (Chinese)

“send” method 能夠跳過 “private, protected 保護

Page 33: Ruby Object Design (Chinese)

結合 send, include 和 module

從外部擴充已存在的物件,完全不需修改程式碼

Page 34: Ruby Object Design (Chinese)

Live Coding.aka Demo!

Page 35: Ruby Object Design (Chinese)

Q&A Thank you.