我注意到在Ruby中,供應商API將結果作爲數組傳回的情況非常普遍?不應該普通的舊對象(像Java中的POJO)更像是一個標準嗎? 如果我寫我自己的圖書館不應該使用
的POJO
波羅斯?Ruby中的普通舊對象?
回答
這是所有的對象,所有的時間。關鍵是被返回的對象是否具有與其相關的行爲。它的優良做到這一點:
def read_first_and_last_name(data_source)
[data_source.read_string, data_source.read_string]
end
但你會發現有一個與這些數據項相關行爲的那一刻...
def print_name(first_name, last_name)
puts "#{first_name} #{last_name}"
end
def read_and_print_name
first_name, last_name = read_first_and_last_name(data_source)
print_name(first_name, last_name)
end
...那麼就應該是一個類:
class FullName
def FullName.read(data_source)
FullName.new(data_source.read_string, data_source.read_strng)
end
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def print
puts "#{@first_name} #{@last_name}"
end
end
與名稱的行爲很好地封裝,使用變得簡單:
def read_and_print_name
FullName.read(data_source).print
end
我認爲陣列VS對象是一個錯誤的二分法。
這是完全合理的,API調用返回一個以上的事物,它是一個數組的形式(和一個數組是一個相當簡單的對象,因此可以說是'PORO',在紅寶石反正)
編輯:在回答您的意見:
你舉的例子(http://github.com/cjheath/geoip)返回不同的項目的數組。我同意這不一定是最好的格式來返回數據。在這種情況下,我會認爲一個具有明智命名鍵的散列會是一個更好的結構。
正如約翰·託普利說,紅寶石的OO性質意味着人們不必去創造這樣的術語爲「PORO」,作爲哈希是相當多的,你可以得到簡單。
什麼結果這些陣列包含哪些內容?答案是在Ruby中它們包含對象,因爲Ruby中的所有東西都是對象。
的POJO在Java世界中是反對一些由企業級Java例如對世界造成的複雜的反應EJB的。引用馬丁·福勒誰創造了這個詞:
「我們想知道,爲什麼人們如此 反對他們 系統使用常規的對象,並得出結論,這是 因爲簡單對象缺乏看中 名稱,以便我們給了他們其中一個, 非常漂亮。「
幸運的是,在Ruby中,人們只需練習面向對象的編程就很自然,不需要圍繞它發明術語。
我想我真正要問的是,如果有更好的方式來獲得命名屬性返回,爲什麼它不被更多地使用,所以也許我應該重新提出這個問題! – Zombies 2010-02-12 14:06:17
其中一個原因可能是,諸如HTTParty這樣的Gems使得在Ruby中包裝Web服務變得非常簡單,並且免費獲得了返回的JSON或XML的輕量級對象包裝。 – 2010-02-12 14:08:59
我個人使用波羅斯在幾乎所有的東西我寫的不是一個完整的一次性腳本。
我發現自己經常創建一個數據持有者類,它可以管理和保存特定類型的多個對象,幷包含一些輔助方法。我發現當別人必須使用我的代碼時,這很方便。
我覺得這個問題是非常主觀的,因爲沒有一個答案總是正確的。有時候傳回數組很好,不需要創建額外的類。有時候額外的抽象層次會讓用戶更加清楚。
這正是我想知道的。感謝您添加您的輸入。我不認爲這是主觀的,因爲我正在試圖去看看別人做什麼,並將所有這些考慮在內以供我自己的啓發。 – Zombies 2010-02-12 14:43:43
- 1. 將普通的舊對象轉換爲值對象
- 2. DataSnap「普通舊Delphi對象」和嵌套對象
- 3. 訪問普通的老式Ruby對象在施普雷1.1
- 4. form_for普通對象
- 5. breeze.js普通舊sql
- 6. 多個NSArray的和普通的對象
- 7. 從更普通的類生成對象
- 8. 的XCode/iOS版:NSCoding - 與普通對象
- 9. 對ASP.NET MVC中的普通對象無效的驗證
- 10. Ruby中對象銷燬的通知
- 11. 使用普通的紅寶石對象委託ActiveRecord對象
- 12. 如何從普通舊Java對象獲取數據到Oracle BI Publisher?
- 13. jQuery DataTables:普通數組或對象
- 14. 將普通舊CSS轉換爲Less
- 15. 實體框架以及普通舊ADO.Net
- 16. 用WCF返回普通舊XML
- 17. 需要幫助從普通的對象數組中刪除指定的對象
- 18. 普通舊數據和`std :: memcpy`對齊問題
- 19. 將jQuery對象轉換爲普通對象
- 20. 如何將JavaScript「特定對象」轉換爲「普通對象」?
- 21. 通過電子ipc的RegExp變成普通的對象
- 22. 從ASP.Net中的普通類訪問應用程序對象
- 23. 操作必須是React/Redux中的普通對象?
- 24. 訪問普通Servlets中的Spring代理會話對象
- 25. 在普通for循環中更改QVector的對象
- 26. 將事件綁定到普通JavaScript中的對象
- 27. 如何限制普通程序集中類對象的使用?
- 28. 如何使用SqlDataReader在普通的舊C#對象中使用BLOB提供的流?
- 29. 列出舊對象
- 30. 普通類的對象與泛型類的對象是否有區別?
沒有,因爲你需要參考API文檔,以確定哪些值將在在什麼地點回來了。如果它在自定義對象中,則不必引用rdoc。 – Zombies 2010-02-12 13:56:29
你實際上是指一個數組,你在數組的預定義點有不同的類實例嗎?你能鏈接到你所指的那種東西的例子嗎? – DanSingerman 2010-02-12 13:59:17
http://github.com/cjheath/geoip ....這似乎是這些功能將在數組 – Zombies 2010-02-12 14:12:10