詳解.NET類的設計問題
.NET類的問題,比較常見。但是對于設計方面,大家可能接觸得很多,不過具體的問題可能不經意間就略過了。本文將結合作者自己的開發(fā)里程,簡述.NET類的設計問題。
雖然搞.NET已經有N年,好像是從C#出生就開始了。可是因為只是業(yè)余,只是愛好,都是自摸的,到現在連個.NET類都設計不好,很是郁悶??!還好,現在知道有博客園這個地方來學習解決問題了。
本人閑著沒事干,于是想設計一個超級平臺來協助處理日常工作、生活、學習、娛樂等各方面的問題,而且想采用最新最快捷的技術,比如WPF、Silerlight、ORM等。于是開始著手,這幾天就碰到了這樣的一個問題,也許我這樣做本身就是問題,只有請各位大俠指點。
現在有一消費類Expense用于消費記賬,其中它需要用到一個賬戶Account來支付。可用于支付帳戶的類型有信用卡CreditCard、現金Cash、支票Check等等。
每次記賬,我需要將所使用的賬戶信息存儲起來以備查詢或統計,于是Expense需要有個Account的屬性。
我這里想了兩個方案,一個是將Expense的Account設計為接口或抽象類,而CreditCard等一干賬戶類型都實現或繼承于它。二是設計Expense的Account為一個類,而這個Account類有個Category屬性,這個屬性設計為接口或抽象類,然后CreditCard繼承于Category。
我這里最不好解決的問題是將要保存的信息存儲到像MS SQL Server這樣的關系型數據庫中,再有不好解決的問題是如何從數據中取回并生成相應對象的問題。比如,如果用第二種Account表的Category字段存儲的內容是什么呢?如果將它設置成賬戶類型的名稱,如CreditCard,然后子表CreditCard關聯到父表Account倒可解決存儲的問題,可是取回時又成問題了,因為CreditCard的數據無法恢復。
以下是我設計的數據庫實體圖
還有一個類似的問題,就是中國的行政區(qū)劃。
中國的區(qū)劃比較復雜(整個世界的都是,中國更甚),是一個不規(guī)則的組織結構或者樹。
我是這么考慮的:
1.最頂層的是國家級,其屬性有名字、首都、語言、文字、貨幣......
2.接著是省一級的行政單位(省、自治區(qū)、直轄市,香港也算這一級,可是有貨幣屬性,文字也不一樣),其屬性有的有省會(直轄市又沒有)、國家...
3.然后是市這一級(市、自治州),屬性有名稱、省、地理坐標...
4.縣一級(縣、市、區(qū)、旗、自治縣等等...——復雜吧,名稱很多,中國特色),屬性有名稱、市(這里面還有省直接管轄的,就不好搞了)
5.鄉(xiāng)一級(鄉(xiāng)、鎮(zhèn)、街道......)
6.村一級(居委會.....)
開始我設計了六個類,后來想如果外國人加進來怎么辦(我是設計聯系人的時候要用到地址,還有在GIS地圖里要用到),我所了解的美國好像不是這個結構的。于是我就將行政區(qū)設計成一個類District,其中有個屬性為抽象或接口類型DistrictCategory,還有Name(string)、Capital(District)、Higher(District,上級)等屬性,然后上面說的6種類型的行政區(qū)Country、Province、City、County等等都繼承自DistrictCategory,它們包含自己獨特的屬性。比如在國家和市這一級里有電話區(qū)號,村有郵政編碼等等屬性。行政區(qū)之間的關系由其District類型的Higher屬性來確定。
這里我也遇到了一個持久化和取回的問題,都與DistrictCategory類型的Category屬性有關。首先是持久化,這里要設計7個數據庫表,我想省事用O/R框架好像不行,對象存儲時要根據不同的類別存儲到不同的表里。接著是取回的問題,我根據一個District的Name屬性查詢到了這個相應的記錄,可是我無法知道其相關的屬性到哪個表示類型的表里面去找,至少不能用程序表達。
示例如下:
- District china = new District();
- china.Name = "中華人民共和國";
如果要是取回,我是找到了浙江這條記錄,可是程序如何知道
原文標題:類的設計問題
鏈接:http://www.cnblogs.com/hooke/archive/2009/11/04/1595836.html