.NET映射設計(Model與UIControl之間的模型關系)


1:實體的使用范圍和重要性

這篇文章討論的概念其實比較簡單的,但是在實際的項目應用中非常的重要和普遍。

我們的項目一般都是采用分層架構,有的三層有的可能五層或者其他的方式組織系統的架構,但是始終要將系統的架構按照模式設計,我們才能重用和接受維護。

隨着ORM的流行和大面積的使用,行業內出現各種各樣的ORM框架,有自己開發的有大型的軟件公司開發的,基本在使用上都遵循了以實體為中心的概念,也就是圍繞關系數據庫中的表為操作對象。復雜的可能還包括連接查詢多表操作等等。[王清培版權所有,轉載請給出署名]

按照分層架構設計中的指導約束,我們應該盡可能的在系統模塊之間采用Entity進行數據的傳遞。當然世事無絕對特殊性的項目可能沒有這么簡單,我們只討論傳統的信息系統項目。

我們看一下分層架構的數據傳遞。

圖1:

這個圖可能畫的有點簡單了,但是能說明大體的概念。

實體在層與層之間傳遞保證了很多因為Data Table數據傳遞帶來的隱患。典型的就是Rows索引和Columns索引,在變動了DAL層的查詢代碼后就會將危險傳遞到BLL層、UI層。這樣在給系統后期的維護提高了代價。

如果我們使用Entity傳遞數據就不會存在這些問題或者說問題變的輕了很多,當然這個需要項目開發過程中的編碼約束了。程序員可能會習慣性的使用Data Table。

2:實體與界面的關系

大部分的系統都是需要將數據展現在界面上,然后在從界面上安全的搜集起來放到實體中進行增、刪、改、查操作。這樣的工作可能都是普通程序員在寫或者是實習程序員在寫,他們並沒有意識到這樣是重復的勞動。但是作為我們過來的程序員其實細心點的都會想到這之間是有聯系的,可以適當的封裝將大大減少開發效率。

我們看一下實體是如何賦值的:

圖2:

這是我找的一個簡單的代碼段,就是將界面上的控件中的值賦到實體中去,然后在進行BLL的業務邏輯操作。

那么我上面的屬性還算是少的,有的可能幾十個屬性都需要從界面上取值,並且是通過驗證后的數據值。所以在開發上有兩個地方確實很耗時,一個是數據的有效性驗證,一個是數據的賦值。當然數據的賦值還有反向的,將實體中的值賦到控件中去,也很浪費時間。[王清培版權所有,轉載請給出署名]

3:利用Model與UIControl之間的模型擴展基礎框架

從上面所講的問題,我們隱隱約約似乎明白點東西了。

我們先來看簡單的封裝。

1首要的問題就是將控件進行二次封裝,將輸入控件與驗證控件進行組合達到自動化驗證數據的有效性,這樣程序員在開發的時候能減少很多驗證的代碼,不用在去找一些正則表達式和使用各種各樣的驗證控件。

2下面就是將控件與實體屬性之間建立關聯,這個關聯有兩個動作,一個是實體賦值到控件上,一個是控件賦值到實體中。我們先來說控件賦值到實體吧,控件賦值到實體,有一個比較重要的問題是數據類型,如何將控件中的值賦到屬性中去,這個就跟實體的構造有直接關系了,實體的構造大部分是圍繞着ORM的要求來的,那么如果你的ORM是采用比較傳統的反射來對實體的數據進行賦值的話,那么這個實體就是孤立的,也只能使用反射來進行賦值。

其實我的想法是提高抽象層次將實體進行歸類將實體的賦值拖入運行時,這樣的好處很明顯。(可以參見我的 “利用抽象、多態實現無反射的綠色環保ORM框架”一文)從ORM角度講提高了性能,從大一點的角度講可以借鑒領域驅動設計中的Module划分和大比例結構,將實體進行抽象后會變的很強大,如果能做到分層架構中合理的表現領域模型那就是絕對的厲害。

其實這里的數據類型就要靠程序員自己去判斷了,是整形的就不能將控件的驗證規則設成其他的。這樣我們就可以根據實體的數據類型將控件的值進行安全轉換(使用as)。

那么實體賦值到控件其實差不多的,根據控件的某種標識找到具體的屬性然后設置就行了。[王清培版權所有,轉載請給出署名]

我們看一下我寫的一個小示例:

圖3:

實體圖

這個實體屬性很多,由於時間關系我只使用兩個屬性做演示。

界面圖

代碼轉換圖

結:經過這樣的封裝我們確實減少了很多重復勞動,我也看到了這個效果是很明顯的。這樣一來就很平滑的將實體封裝,送往BLL,然后再接受實體賦值到控件上。雖然簡單,但是作用很大,可以適當的細化將數據表格控件進行封裝,我想那個效果更明顯。

上面是我在做基礎庫時的一點小小的經驗,希望大家用的着。[王清培版權所有,轉載請給出署名]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM