從Swift語言看ORM的定位錯誤
Swift提供了資料結構struct和類Class兩種, 資料結構和類一樣支援行為,包括方法和初始化,資料結構和類的重要區別是:資料結構按複製方式傳遞,當你將一個資料結構傳遞給另外一個變數時,實際是複製了一份,但是類生成的物件進行傳遞時是按引用傳遞,傳遞的是那個物件的地址(當然地址值也是複製)。
Swift Struct程式碼如下:
struct Card { var rank: Rank var suit: Suit func simpleDescription() -> String { return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" } } let threeOfSpades = Card(rank: .Three, suit: .Spades) let threeOfSpadesDescription = threeOfSpades.simpleDescription() <p> |
Swift語言顯式地區分了資料結構struct和類Class,而在我們傳統語言中,包括Java C# Pthyon Ruby等基本都只有類Class一種物件模型。這就產生了問題。
這個問題我在從資料結構+演算法分析ORM的末日已經提到,資料表是一種資料結構,ORM框架是將資料結構轉為物件,其實這個物件是貧血物件,也就是隻有屬性或setter/getter而沒有其他業務行為的物件,如:
class Order{ String orderId; Double money; .. } <p> |
我們使用ORM,是將資料表order中的記錄拷貝到這個貧血物件Order中。實際上這個失血物件Order也是一種資料結構,只不過因為語言本身不支援資料結構,所以,我們借用型別Class的物件模型來作為資料結構物件,而且是對Class進行肢解的一種黑客方式(去除了其鮮明特徵:行為)。
現在有了Swift的struct,我們實際應該是將資料表order的數值複製到struct中,而且struct是按值傳遞的,如果你修改了原來的struct,其他複製的不會被改變。資料表實際是一個遠端的struct。
從以上分析看出,目前ORM框架包括JPA Hibernate Django Rails的ActiveRecord實際都定位錯誤了,將型別Class物件模型作為資料結構使用。
以前我們指出ORM末日主要是從抽象洩漏和效能角度提出問題,但是這些問題一般只是在專案複雜時才顯露出來,小專案反而體現ORM的快速的特點,但是我們從Swift這個新語言上看到,ORM方向搞錯了,應該是structRM才對啊。
ORM在未來面臨土崩瓦解,這個詞語會成為歷史名詞。
[該貼被banq於2014-06-07 09:05修改過]
相關文章
- Swift 語言的設計錯誤Swift
- 從錯誤處理看 Rust 的語言和 Go 語言的設計RustGo
- 從OOP和FP看蘋果Swift語言與Scala比較OOP蘋果Swift
- 從語言學角度看詞嵌入模型模型
- 從商業利益看 Go 程式語言Go
- Go 語言的錯誤訊息處理Go
- 從Go、Swift出發:語言的選擇需謹慎GoSwift
- Swift錯誤處理Swift
- go語言初學者常見錯誤Go
- 4- C語言常見錯誤C語言
- C語言常見錯誤分析 (轉)C語言
- Go語言基礎-錯誤處理Go
- Go語言錯誤處理機制Go
- Swift多語言版本的建立Swift
- Swift 語言的字串與字元Swift字串字元
- Swift 語言的基本運算子Swift
- Swift 語言基礎Swift
- 我不懂 Swift 語言Swift
- backtrace() 段錯誤定位
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- Swift 中的錯誤與異常Swift
- 《D程式設計語言》中的低階錯誤程式設計
- 從程式語言排行看程式設計師信仰程式設計師
- 【譯】“錯誤”的使用 Swift 中的 ExtensionSwift
- Swift 新語言開發Swift
- Swift語言快速入門Swift
- 淺談Swift程式語言Swift
- 《C語言開發從入門到精通》一第1章C語言之定位1.1 C語言的誕生C語言
- Go語言(golang)的錯誤(error)處理的推薦方案GolangError
- Lumen 表單校驗配置 validation 的中文 (多語言) 錯誤語
- 蘋果的新程式語言 Swift 簡介蘋果Swift
- Swift中使用C語言的指標SwiftC語言指標
- 蘋果新的程式語言 Swift 語言進階(十二)--選項鍊蘋果Swift
- 第二章 Swift語言Swift
- Swift 程式語言入門教程Swift
- 從五大語言看函式和lambda表示式函式
- 從一組漫畫看程式語言學習曲線
- 前端開發--如何快速定位錯誤前端