前面29天,大致上已經把.Net 2.0 Webform的基礎與一些概念都介紹完了。
接下來的模組其實都比較獨立出來,今天要講的是O/R mapping的簡介。
ORM可以寫成一整書也不嫌少,所以我這邊只先蜻蜓點水的點出一點概念。
1.定義
Object Relational Mapping,物件與關連式資料庫對應技術
2.簡單的說
(1)將原本資料庫中的資料表(可能是根據幾個資料表的關係,組成的某個資料集合)對應為一個物件集合,將資料列對應為一個物件,將欄位對應成物件的一個屬性。
(2)讀取關連式資料庫資料出來後,經過ORM,就可以透過物件的方式去使用該資料集合。
(3)也可透過物件的方式,定義物件的行為,而來對關連式資料庫進行CRUD。
3.目的
(1)developer面對的是物件,而不是一堆資料表、資料列。
物件、類別的定義,可以回頭想想,類別是抽象的集合。有屬性、有行為,有OO的特性,絕對比攤開看不出關係的dataset好懂,reuse也會比較高,也會比較穩定跟抽象。
(2)Domain model mapping
可以根據domain model設計出更穩定的系統
(3)透過ORM定義的語法,比起SQL來說,程式的可維護性更高
(4)可攜性
會透過ORM framework,可以把注意力focus在物件的操作與使用,而不用因為不同的DBMS就寫不同套的方法做一樣的事。
比較正式的ORM framework會將自己定義的語法,根據不同的DBMS轉成對應可執行的SQL statement。
4.注意
(1)performance問題
開發效率提升,但執行效率容易有隱憂。轉換SQL對應的問題,通常結果不會錯,但效率可能會很差。所以要去瞭解最後轉出來的SQL statement有沒問題。
5.迷思
學會ORM就不需要學SQL了?學jQuery也得懂JavaScript本身的特性、意義跟用法。
ORM只是關連性資料庫與物件中間的橋樑,而SQL才是資料庫的語言,ORM只是協助轉換。
所以SQL的觀念、基本語法還是都要具備,用起ORM才能得心應手,才能用的更正確、更精準。
6.比較常見的ORM framework
(1)NHibernate
(2)LINQ to SQL
(3)ADO.NET Entity framework: 通常使用LINQ to Entity Framework