Author:水如烟
总目录:行政区划数据方案设计
上一篇,行政区划程序的设计(四)
上篇说了RegionalCodeApplication项目的界面表现,这篇说这个项目的编码要点。
项目依赖于以下项目:RegionalCodeCenter,RegionalCodeCommon,LzmTW。所以写这个项目的代码时,也需同时考虑这三个项目。
如果将项目也作对象看待,那么,依赖中的三个项目是为当前项目服务,为当前项目提供相关的属性、方法等。
当前项目的重点是UserControlQueryBase。
结合方案的需求和数据库提供信息的特点,我们所需要的信息,全部包含在存储过程“[Program].[行政区情况] @当前时间”返回的视图里面。
如果UserControlQueryBase当前已有这个视图的DataTable,无论是查全部情况还是导航图、名称找区划码、区划码找名称,都已经足够了。
现在可以确定,UserControlQueryBase只要求外部环境给它提供相应的数据集就可以了。
逻辑图大概是这样:
外部提供数据集的函数可以初步定义如下:
FUNCTION GetRegionalCodeAllInformations(ByVal QueryDataDate As DateTime) As DataTable
因为返回的DataTable结构是固定的,我们更希望用强类型数据集来表示,因此可以建造一个RegionalCodeInfromationsTable,上面函数重新构造成这样:
FUNCTION GetAllInformationsTable(ByVal QueryDataDate As DateTime) As AllInformationsTable
函数中的参数是由用户选择的,对当前的数据,2006-09-26和2006-09-27返回的数据是相同的。因此,可以构造一个函数,来判断是否需要请求外部提供数据。
FUNCTION IsSameDataDate(ByVal QueryDataDate As DateTime, CurrentDataDate As String) As Boolean
CurrentDataDate是当前数据版本日期,8位字符串,如“20030331”。目前为止,数据库提供了8个版本的数据。
引入了判断函数后,GetAllInformationsTable函数的参数变量可以改为String类型:
FUNCTION GetAllInformationsTable(ByVal QueryDataDate As String) As AllInformationsTable
如何确定当前的数据版本日期?我们可以要求外部提供数据时,将这个信息写到TableName里去。
以上两个函数以及AllInformationsTable,无论是WinForm还是WebForm,都可以使用,因此,实现的代码放在RegionalCodeCommon项目里面。
在整个方案中,DateTime日期数据转换为8位字符串是常用到的,这种转换在另外一些场合也应用到,所以这个转换函数可以放在LzmTW项目里面。
下面开始编写UserControlQueryBase控件,以及上面的函数、数据集。
下一篇,行政区划程序的设计(六),重新分析项目间的关系。