ruby object design (chinese)

Post on 12-Jul-2015

515 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

淺談 ruby 物件設計

Eddie Li (ADZ)

eddie@visionbundles.com

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.

top related