详解.NET类的设计问题

开发 后端
本文将谈论的是.NET类的设计问题,包括作者所写的一个实际的例子,希望对大家有所帮助。

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

虽然搞.NET已经有N年,好像是从C#出生就开始了。可是因为只是业余,只是爱好,都是自摸的,到现在连个.NET类都设计不好,很是郁闷啊!还好,现在知道有博客园这个地方来学习解决问题了。

本人闲着没事干,于是想设计一个超级平台来协助处理日常工作、生活、学习、娱乐等各方面的问题,而且想采用最新最快捷的技术,比如WPF、Silerlight、ORM等。于是开始着手,这几天就碰到了这样的一个问题,也许我这样做本身就是问题,只有请各位大侠指点。

现在有一消费类Expense用于消费记账,其中它需要用到一个账户Account来支付。可用于支付帐户的类型有信用卡CreditCard、现金Cash、支票Check等等。

每次记账,我需要将所使用的账户信息存储起来以备查询或统计,于是Expense需要有个Account的属性。

我这里想了两个方案,一个是将ExpenseAccount设计为接口或抽象类,而CreditCard等一干账户类型都实现或继承于它。二是设计ExpenseAccount为一个类,而这个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)HigherDistrict,上级)等属性,然后上面说的6种类型的行政区CountryProvinceCityCounty等等都继承自DistrictCategory,它们包含自己独特的属性。比如在国家和市这一级里有电话区号,村有邮政编码等等属性。行政区之间的关系由其District类型的Higher属性来确定。

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

示例如下:

  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

责任编辑:彭凡 来源: 博客园
相关推荐

2010-01-06 18:27:06

.Net Framew

2009-10-20 17:38:54

VB.NET Comp

2009-04-23 10:33:52

ASP.NET设计思想微软

2010-01-08 14:56:18

VB.NET类定义

2010-01-05 16:15:05

.NET Framew

2010-01-21 09:08:53

.NET设计模式

2010-01-05 15:43:13

.NET Framew

2009-10-12 09:02:03

SmartRWLock

2009-12-18 16:39:59

ADO.NET基础类

2009-10-26 09:16:08

BigInteger类

2009-12-28 16:57:40

ADO .NET 类

2023-07-04 08:26:15

2009-11-02 17:32:37

VB.NET抽象类

2009-08-10 14:31:46

ASP.NET组件设计ASP.NET控件生命

2009-10-09 14:10:23

.NET数组

2012-03-31 10:01:40

ASP.NET MVC

2023-07-03 08:48:40

Web模块化设计

2009-08-06 15:56:40

ASP.NET Coo

2009-05-21 13:25:50

.NETCountDownLa微软

2023-09-01 07:25:39

领域驱动设计DDD
点赞
收藏

51CTO技术栈公众号