Ruby Object Design (Chinese)
-
Upload
eddie-lee -
Category
Technology
-
view
510 -
download
3
Transcript of Ruby Object Design (Chinese)
淺談 ruby 物件設計
Eddie Li (ADZ)
http://adz.visionbundles.com
Github: afunction
Facebook: /adz.624
Ruby 物件與其他語⾔言不同的地⽅方
1.語法省略
缺點
1. 程式碼更容易閱讀、更像⼈人類語⾔言(model validation, routes, rspec, view helper)
優點
1. 對初學者來說更⾼高的學習曲線(⾮非常容易誤解)
2. 沒有真正的 property
class/instance variables and
method instead.
attr_accessor / attr_reader / attr_writer
不過還是可以透過 class/instance variable 存取
3. 運算⼦子也是 methodmagic!
def +def -def *def /
def << def ==
def ===
4. Open Class
5. Meta-programming
⽤用程式寫程式
封裝抽象⾏行為
優點
1. 區隔不同 level 的邏輯,讓商業邏輯更乾淨。2. 沒有極限的增加⽣生產⼒力
缺點
1. 不容易維護 (但有解決⽅方法)2. 難以對抽象⾏行為的 method, variables 命名3. 有時候也難以了解閱讀程式碼
class_evaldefine_method
define_singleton_method
6. module & classPHP Traits多重繼承
打破上下繼承關係
a. DRY 重複的 method
b.當有 class include 這 module 時會呼叫 self.included
“base” 指的是誰 include 了這個 module
你可以⽤用 module …
1. 把共通⾏行為模組化 2. 搭配 meta-programming 把抽象⾏行為模組化 3. 減少程式碼重複
優點
1. 容易組織⼀一個⼤大型 class2. 更彈性的設計跟擴充物件
缺點
1. 難以閱讀和撰寫 unit-test(當模組間有⾼高度相依的 context 時)
2. ⾼高學習曲線3. 容易產⽣生程式碼誤解
7. 跳過 “private, protected” 保護
“send” method 能夠跳過 “private, protected 保護
結合 send, include 和 module
從外部擴充已存在的物件,完全不需修改程式碼
Live Coding.aka Demo!
Q&A Thank you.