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

More Related Content

PPT
從 Java programmer 的觀點看 ruby
PPT
漫谈php和java
PDF
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
PPTX
Duck Typing and Multiple Inheritance
PPTX
Code guidelines
PDF
Rails talk-5
PDF
Ruby Object Design
PDF
Ruby Object Design
從 Java programmer 的觀點看 ruby
漫谈php和java
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Duck Typing and Multiple Inheritance
Code guidelines
Rails talk-5
Ruby Object Design
Ruby Object Design
Ad

Ruby Object Design (Chinese)