设计行政区划程序的方法
Author:水如烟
总目录:行政区划数据方案设计
上一篇,行政区划程序的设计(十五),实现获取区划信息功能_1。
上一篇实现的是获取各种版本的数据集。
针对这个方案的特点,用户使用更多的可能只是针对某一版本的数据集,特别是可能只使用最新版本的数据集。
这一篇的代码,已接近界面上的应用。
以下代码在RegionalCodeCenter项目实现。
由于在一开始的方案分析中,分析还是全面、准确、到位、有效的,也通过接口明确了各种范围、各个应用的分工,所以,就算断断续续的来实现这个方案,来写代码,思路还是沿承了下来,没有给弄糊涂。
接口IClientUseServices其实实现的是下面流程图的左边部分。
PublicInterfaceIClientUseServices
EventServiceMessageAsServiceMessageHandler
FunctionIsSameDataDate(ByValqueryDataDateAsDateTime,ByValcurrentDataDateAsString)AsBoolean
FunctionGetAllInformationsTable(ByValqueryDataDateAsDateTime)AsRegionalCodeCommon.Database.dsRegionalCode.AllInformationsDataTable
FunctionGetVersionsDataTable()AsRegionalCodeCommon.Database.dsRegionalCode.VersionsDataTable
SubDispose()
EndInterface
EndNamespace
在实现接口前,先建一个类RegionalCodeService来取各版本的数据集。
RegionalCodeService.vb
PublicClassRegionalCodeService
InheritsRegionalCodeCommon.Services.RegionalCodeServiceBase
SubNew(ByValconnectionStringAsString)
MyBase.New(NewServices.ServerServices(connectionString))
EndSub
EndClass
EndNamespace
实现接口的类ClientUseServices有两个文件,
ClientUseServices.vb
PublicClassClientUseServices
ImplementsRegionalCodeCommon.Interface.IClientUseServices
PublicEventServiceMessage(ByValsenderAsObject,ByValmessageAsString)ImplementsRegionalCodeCommon.Interface.IClientUseServices.ServiceMessage
'数据服务
PrivateWithEventsgRegionalCodeServiceAsRegionalCodeCommon.Services.RegionalCodeServiceBase
'''<paramname="regionalCodeService">数据服务</param>
SubNew(ByValregionalCodeServiceAsRegionalCodeCommon.Services.RegionalCodeServiceBase)
Me.gRegionalCodeService=regionalCodeService
EndSub
'版本集
PrivategVersionDateTableAsNewRegionalCodeCommon.Database.dsRegionalCode.VersionsDataTable
'当前区划信息
PrivategCurrentAllInformationsTableAsNewRegionalCodeCommon.Database.dsRegionalCode.AllInformationsDataTable
'当前版本
PrivategCurrentVersionDateAsString="Empty"
'数据来源
PublicPropertySource()AsRegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource
Get
ReturnMe.gRegionalCodeService.Source
EndGet
Set(ByValvalueAsRegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource)
Me.gRegionalCodeService.Source=value
EndSet
EndProperty
'存放区划码信息的文件
PublicPropertyRegionalCodeFileName()AsString
Get
ReturnMe.gRegionalCodeService.RegionalCodeFileName
EndGet
Set(ByValvalueAsString)
Me.gRegionalCodeService.RegionalCodeFileName=value
EndSet
EndProperty
'存放服务器当前版本集的文件
PublicPropertyVersionDateFileName()AsString
Get
ReturnMe.gRegionalCodeService.VersionDateFileName
EndGet
Set(ByValvalueAsString)
Me.gRegionalCodeService.VersionDateFileName=value
EndSet
EndProperty
'''<summary>
'''起用最旧版本
'''</summary>
'''<remarks>如查询日期早于最旧版本日期,使用最旧的版本</remarks>
PublicPropertyUseOldestVersion()AsBoolean
Get
ReturnMe.gRegionalCodeService.UseOldestVersion
EndGet
Set(ByValvalueAsBoolean)
Me.gRegionalCodeService.UseOldestVersion=value
EndSet
EndProperty
PublicFunctionIsSameDataDate(ByValqueryDataDateAsDate,ByValcurrentDataDateAsString)AsBooleanImplementsRegionalCodeCommon.Interface.IClientUseServices.IsSameDataDate
ReturnMe.gRegionalCodeService.IsSameDataDate(queryDataDate,currentDataDate)
EndFunction
PrivateSubgRegionalCodeService_ServiceMessage(ByValsenderAsObject,ByValmessageAsString)HandlesgRegionalCodeService.ServiceMessage
SendMessage(message)
EndSub
PrivateSubSendMessage(ByValmessageAsString)
RaiseEventServiceMessage(Nothing,message)
EndSub
PublicSubDispose()ImplementsRegionalCodeCommon.Interface.IClientUseServices.Dispose
EndSub
EndClass
EndNamespace
ClientUseServices.GetData.vb
PartialClassClientUseServices
PublicFunctionGetAllInformationsTable(ByValqueryDataDateAsDate)AsRegionalCodeCommon.Database.dsRegionalCode.AllInformationsDataTableImplementsRegionalCodeCommon.Interface.IClientUseServices.GetAllInformationsTable
'如果查询版本与当前版本相同,则取当前区划信息;否则从gRegionalCodeService数据集中取
IfNotIsSameDataDate(queryDataDate,Me.gCurrentVersionDate)Then
gCurrentAllInformationsTable=Me.gRegionalCodeService.GetAllInformationsTable(queryDataDate)
IfMe.gCurrentAllInformationsTableIsNotNothingThen
Me.gCurrentVersionDate=Me.gCurrentAllInformationsTable.TableName
Else
Me.gCurrentVersionDate="Empty"
EndIf
EndIf
ReturnMe.gCurrentAllInformationsTable
EndFunction
PublicFunctionGetVersionsDataTable()AsRegionalCodeCommon.Database.dsRegionalCode.VersionsDataTableImplementsRegionalCodeCommon.Interface.IClientUseServices.GetVersionsDataTable
'版本集总向gRegionalCodeService数据集中取
Me.gVersionDateTable=Me.gRegionalCodeService.GetVersionsDataTable
ReturnMe.gVersionDateTable
EndFunction
PublicReadOnlyPropertyCurrentVersionDates()AsSystem.Collections.ObjectModel.ReadOnlyCollection(OfString)
Get
DimtmpListAsNewList(OfString)
ForEachrowAsRegionalCodeCommon.Database.dsRegionalCode.VersionsRowInMe.gVersionDateTable.Rows
tmpList.Add(row.版本日期)
Next
ReturnNewSystem.Collections.ObjectModel.ReadOnlyCollection(OfString)(tmpList)
EndGet
EndProperty
PublicSubLoad()
Me.gRegionalCodeService.Load()
EndSub
PublicSubSave()
Me.gRegionalCodeService.Save()
EndSub
EndClass
EndNamespace
以上是在命名间Services上的,我再将它提交到根里去,也起名为RegionalCodeService类,
InheritsServices.ClientUseServices
SubNew(ByValconnectionStringAsString)
MyBase.New(NewServices.RegionalCodeService(connectionString))
EndSub
EndClass
这样,RegionalCodeCenter根命名下只有两个服务类,
一是UpdateDatabaseService,含实现更新数据的全部信息,
二是RegionalCodeService,含实现查询数据的全部信息。
我对这两篇实现的功能做了简单测试,效果如下:
到目前的方案代码缓后再上传。
下一篇,行政区划程序的设计(十七),服务和环境的结合。
本文地址:http://www.45fan.com/dnjc/70842.html