instance 在不同 class 之間的引用....


#1

請問一下…

在 rails 的 code 中有時會看到類似這種 @instance 在彼此之間的引用 & 初始化…
這個目的是方便包裝參數還是?如何使用的思考點在哪?

class Order
  attr_accessor :customer ## 類似把 Customer.new 之後的物件丟出來
  def initialize(customer)
     @customer = Customer.new('name')
  end
end

class Customer
   def initialize(name)
       ##...一些參數
   end
   def name
     ## 開始可以設定很多 customer 的 method.
   end
end

是純粹方便把 new 出來的 @customer 丟到 order 中當傳的對象…(比 hash, array 方便)
也有 Customer 的 instance method 可以用…

這個手法是怎活用的?..

謝謝


#2

這邊我只能說概念性的描述,你要找的東西會類似在 OOP 的 design pattern 內都有,不然就是資料結構,其餘的都是應用(實戰)而已

一個物件用不用其實是取決於人,否則其實 Array / Hash / Set 可以解決掉大部分的需求就是,然而 OOP 的基本教義派裡面,每個資料集合都會有自己的收斂的集合體,那就是一個物件

類似一個汽車從汽車工廠做出來後,會有門 / 顏色 / 左右駕…等等的資訊,它應該包裝在一台汽車內,而這台做出來的汽車說不定是汽車工廠的展示用車,展示用車要停在門口展示,所以汽車工廠還是要把剛剛生產的汽車抓回來放在那,但是汽車工廠無聊會用它廠的公車來做展示,該位置會被取代

而一台汽車內可能會有皮椅,皮椅的組成包括骨架 / 蒙皮 / 海綿,是從皮椅工廠做出來的,做出來後只需要運給汽車,汽車也只需要放在自己的位置內即可,汽車不會管內容物是怎樣的,那是皮椅工廠負責提供,裝得下去就ok

在上面你會看到一個一個節點(汽車 / 皮椅 / 工廠 / 位置),每個都是物件或類別或變數,然後環環相扣,整個資料結構的設計都會出現就是,所以詳盡分析完,一個蘿蔔一個坑,最後就只是把流程串起來而已,類似汽車工廠產生汽車時必須和皮椅工廠定貨,汽車快完工時要把皮椅也放進去…有的沒的,這就是非常非常直覺的 OOP 概念

另外一種則是順序與流程式的寫法(Functional Programming)那就是另外一個故事了,OOP 的缺點是包裝過多階層過多,物件操作過多時效能會變慢,所以其實我後來寫的都比較偏 FP 就是(省變數和記憶體…),而以前 OOP 摸了好一陣子,不過這邊沒有對錯的問題,因為時間和記憶體差異很小,且 OOP 直覺好改好修,而 OOP 摸一陣子跑來玩 FP 會整個世界觀翻盤,反之亦然 X"D,所以基本上練好一個才去玩另外一個會好點,不然會很崩潰唄,以上

((當然我沒說FP的基本教義派…包裝會比OOP多十倍這回事…哈哈…anyway選擇適用的即可))