軟件開發的生命週期中,數據庫建模後,在某個數據庫系統中造成相對應的表,以後再根據數據庫模型設計相關的業務對象及其關係.這實際上是進行了兩次設計,一次是數據庫模型設計,數據庫模型設計是根據現實業務提取出來的模型,這個模型最終是產生了業務數據之間的關係以及業務數據的存儲方式.數據庫
數據庫建模完成後,咱們須要根據數據庫模型使用某一個種面嚮對象語言設計出對象模型,對象模型與數據庫模型的區別在於對象模型主要是爲了使設計過程更加面向對象,抽象、繼承、多態、封裝,對象模型中的實體與數據庫模型中的實體可能基本一致,但也只是對於小型的、業務不太複雜的系統才能可能,對於大型的複雜系統(好比HIS系統),對象模型與數據庫模型中的實體要一致則基本不可能.服務器
兩次不一樣角度、不一樣層面的設計(數據庫模型關注存儲,對象模型關注OO表達)增長了咱們的工做量,並且兩次設計以後產生了差別,最終致使了數據庫中的實體(表)與對象模型中的實體(對象)產生不一致了,屬性字段(數據庫中的字段、對象中屬性)也可能不一致了,在實際的開發中,必須很熟悉對象的屬性對應到哪一個表上的字段,這無疑增長了咱們的學習成本。框架
也許,這就是各類ORM框架(如Nhibernate、Entity Framework)的主要目標,目前,ORM框架有輕型的,有重量級的,ORM框架的優劣咱們先放一邊,從衆多項目使用狀況來說,有成功的、也有失敗的,從工程師對ORM框架的態度上來看,有嗤之以鼻者、也有瘋狂追捧的。每一個人的計算方法不同,各類滋味,還自有本身去體會才行。學習
話說回來,咱們仍是回到原始,在沒有ORM框架的狀況下,如何設計好出色的OO模型,我這裏以HIS系統中的患者基本信息來舉例。spa
在數據庫系統設計中,在遵循了數據庫範式的同時,爲了提升效率、減小服務器壓力,會進行必定的冗餘,好比次例的HIS系統中,患者的基本信息會存儲在一種表中,可是對象設計以下:hibernate
BaseClass類是抽象的基本類,存儲了在業務系統中方便查找患者的五筆碼、拼音碼、自定義碼等,PatientInfo類包含了患者的姓名性別、入院相關信息、費用信息、地址信息、各類編號等,而這些信息又分了幾個單獨的實體和枚舉,有患者性別枚舉,患者狀態信息枚舉,以及定位患者的位置信息類(Plocation類),存儲患者各類編號的類(PID類),存儲與患者相關的金錢有關的類(MoneyInfo類),這些類的屬性對對應到數據庫患者基本信息表中的每一個列。設計
結後語:對象
我的對ORM框架是徹底接受而且很是喜歡的,但我認爲不是每一個項目、每一個系統都適合使用ORM,若是能把對象模型設計好仍是能有一個維護性好、擴展性好、新人學習成本低的系統。目前我認爲對於HIS系統來講,不太適合使用ORM框架,由於HIS業務太複雜,需求不少,變化很大,而通常的HIS廠商每每須要投入開發人員在客戶現場進行本地化開發,在現場加字段、加表是常有的事情,這使得HIS廠商必須僱傭軟件開發水平較高的人員在駐場開發,使用ORM增長了現場人員的學習壓力,間接提升了HIS廠商的投入成本。blog