详解.NET类的设计问题 net架构指南
创始人
2024-06-10 17:11:49
0

.NET类的问题,比较常见。但是对于设计方面,大家可能接触得很多,不过具体的问题可能不经意间就略过了。本文将结合作者自己的开发里程,简述.NET类的设计问题。

虽然搞.NET已经有N年,好像是从C#出生就开始了。可是因为只是业余,只是爱好,都是自摸的,到现在连个.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的数据无法恢复。

以下是我设计的数据库实体图

数据库实体图

还有一个类似的问题,就是中国的行政区划。

中国的区划比较复杂(整个世界的都是,中国更甚),是一个不规则的组织结构或者树。

我是这么考虑的:

1.最顶层的是国家级,其属性有名字、首都、语言、文字、货币......

2.接着是省一级的行政单位(省、自治区、直辖市,香港也算这一级,可是有货币属性,文字也不一样),其属性有的有省会(直辖市又没有)、国家...

3.然后是市这一级(市、自治州),属性有名称、省、地理坐标...

4.县一级(县、市、区、旗、自治县等等...——复杂吧,名称很多,中国特色),属性有名称、市(这里面还有省直接管辖的,就不好搞了)

5.乡一级(乡、镇、街道......)

6.村一级(居委会.....)   

开始我设计了六个类,后来想如果外国人加进来怎么办(我是设计联系人的时候要用到地址,还有在GIS地图里要用到),我所了解的美国好像不是这个结构的。于是我就将行政区设计成一个类District,其中有个属性为抽象或接口类型DistrictCategory,还有Name(string)、Capital(District)、Higher(District,上级)等属性,然后上面说的6种类型的行政区Country、Province、City、County等等都继承自DistrictCategory,它们包含自己独特的属性。比如在国家和市这一级里有电话区号,村有邮政编码等等属性。行政区之间的关系由其District类型的Higher属性来确定。

这里我也遇到了一个持久化和取回的问题,都与DistrictCategory类型的Category属性有关。首先是持久化,这里要设计7个数据库表,我想省事用O/R框架好像不行,对象存储时要根据不同的类别存储到不同的表里。接着是取回的问题,我根据一个District的Name属性查询到了这个相应的记录,可是我无法知道其相关的属性到哪个表示类型的表里面去找,至少不能用程序表达。

示例如下:

  1. District china = new District();   
  2. china.Name = "中华人民共和国";   
  3. Country country = new Country();   
  4. country.Abbreviation = "PRC";   
  5. china.Category = country;   
  6. District zhejiang = new District();   
  7. zhejiang.Name = "浙江";   
  8. Province pro = new Province();   
  9. pro.Type = ProvinceType.省;   
  10. zhejiang.Category = pro;   
  11. zhejiang.HigherLevel = china;  

如果要是取回,我是找到了浙江这条记录,可是程序如何知道

原文标题:类的设计问题

链接:http://www.cnblogs.com/hooke/archive/2009/11/04/1595836.html

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...