從LinQ看我們的ORM設計

2021-09-05 15:06:52 字數 1740 閱讀 7698

一直以來有些閉門造車,今天看了微軟的一篇重要的orm文章《下一代資料訪問:使概念級別成為現實》,詳細的講解了微軟下一代資料訪問的設想和實現。我對其中的關於概念模型的一段**相當感興趣,因為他和我設計的torridity(我們的orm框架名)非常的相似。

在ms的關鍵字描述中,乙個重要的改變是:關鍵字被描述到實體中,而不是欄位中:

典型的實體定義,具備標識 [關鍵字] 和一些成員

-->

在很多orm實現中,都是放在欄位中,我認為那是錯誤的。現在看看我們的定義:

既然是做orm,繼承性當然是不能缺少的,ms使用下面的方式定義:

派生產品,可以對映 tph、tpc、tpt

-->

nullable="false" size="max" />

我們使用了相同的方式:

復合型別是對簡單型別的擴充套件,實際上是支援物件化的屬性。ms的定義如下:

複雜型別只定義結構而不定義標識。可以

在 0 個或更多實體定義中內嵌使用

-->

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

nullable="false" size="max" />

復合型別在torridity並沒有被明確標明:complextype,你可以使用任何實體作為結構復合進來。

在ms的設計中,集合屬性是這樣描述的:

product [如上定義] 和 orderdetails [出於簡明需要而未顯示] 之間

關聯的示例

-->

在torridity中,一對一被稱為引用屬性,而一對多稱為集合屬性,使用下面的方式定義:

注意引用屬性的區別:ms指向了乙個型別,而我們指向了乙個實體(typekey)。我認為ms的設計有些欠妥。

在ms中支援實體容器,功能好像強一些:

實體容器可定義

entitysets(某一型別(可能)多形態例項的集合)和

邏輯封裝

-->

type="relationshipset(order_detailsorders)">

type="relationshipset(order_detailsproducts)">

在torridity中,集合類是自動建立的,沒有專門的定義部分。

我非常奇怪的問題,orm既然是物件化的,為什麼沒有包含乙個非常重要的概念:介面。(也許作者忘記了吧)。

在torridity提供了支援:

通過支援介面將大大簡化實體的設計,而且是程式設計更加條例。我們知道真真的領域模型是不能通過繼承性描述的,而支援通過特性(即介面)來描述。

從獸首事件看我們自己缺什麼

當下就獸首事件在網路上爭論,無非兩種意見,一種是認同,覺得應該這麼做 還有一種是不認同,認為丟了中國人的臉,或者認為我們素質差。看來看去,後面一種居多。我自己是前一種,這裡我想說說後一種。為什麼這麼多國人認同後面一種?我覺得最基本的,這些人都缺少一些東西,缺少什麼?缺少做中國人的靈魂。且不論法律之類...

怎麼檢視我們的裝置是usb裝置

怎麼檢視我們的裝置是usb裝置,這裡我舉個usb外接行動硬碟為例來說明,其它的裝置同樣類似的做法。我的電腦裡有兩個內建sata硬碟,有兩個sata外接行動硬碟。碟符為 dev sda dev sdb dev sdc dev sdd 其中 dev sdc和 dev sdd是我的兩個sata外接行動硬碟...

ORM最簡單的設計

資料庫設計不外乎三種關係 1。一對一 2。一對多 3。多對多 首先,為每個表建立對應的實體類 1。一對一 人員表a,人員資訊表b,那麼物件設計在為類a a業務類,類b,b業務類 a類裡有個b類的物件 取b資訊的方法寫在b業務類中 3。一對多 人員表a,人員資訊表b,人員有多個資訊 那麼物件設計在為類...