行政区划程序的设计(十七)

Author:水如烟

总目录:行政区划数据方案设计

 上一篇,行政区划程序的设计(十六),实现获取区划信息功能_2。


RegionalCodeCenter项目是为界面提供服务的中心。各项服务可能有一些特别的属性需要配置,所以也有一个服务环境问题需要纳入考虑。

这个方案比较简单,环境类Enviroment设置如下:
Enviroment.vb 

 

Imports  System.ComponentModel
Imports  System.Windows.Forms
Imports  System.Windows.Forms.Design
Imports  System.Drawing.Design

< Serializable() >  _
Public   Class  Enviroment
    
Public   Event  EnviromentChanged()

    
Private  gLogonInformations  As   New  LzmTW.uSystem.uData.uSql.LoginInformations
    
Private  gNetRegionalCodeFileName  As   String   =   ""
    
Private  gDataSource  As  RegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource  =  RegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource.离线数据优先
    
Private  gUseOldestVersion  As   Boolean   =   True
    
Private  gRegionalCodeFileName  As   String   =   ""
    
Private  gVersionDateFileName  As   String   =   ""

    
< Description( " 登录服务器信息 " ), Category( " 连接服务 " ), Browsable( False ) >  _
    
Public   Property  LogonInformations()  As  LzmTW.uSystem.uData.uSql.LoginInformations
        
Get
            
Return  gLogonInformations
        
End   Get
        
Set ( ByVal  value  As  LzmTW.uSystem.uData.uSql.LoginInformations)
            gLogonInformations 
=  value
        
End   Set
    
End Property

    
< Description( " 本地区划码文件 " ), Category( " 更新服务 " ), Editor( GetType (FileNameEditor),  GetType (UITypeEditor)) >  _
    
Public   Property  NetRegionalCodeFileName()  As   String
        
Get
            
Return  gNetRegionalCodeFileName
        
End   Get
        
Set ( ByVal  value  As   String )

            
If  gNetRegionalCodeFileName  <>  value  Then
                gNetRegionalCodeFileName 
=  value
                OnEnviromentChanged()
            
End   If

        
End   Set
    
End Property

    
< Description( " 指定数据来源 " ), Category( " 数据服务 " ) >  _
    
Public   Property  DataSource()  As  RegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource
        
Get
            
Return  gDataSource
        
End   Get
        
Set ( ByVal  value  As  RegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource)

            
If  gDataSource  <>  value  Then
                gDataSource 
=  value
                OnEnviromentChanged()
            
End   If

        
End   Set
    
End Property

    
< Description( " 指定如查询日期早于最旧版本日期,是否使用最旧的版本 " ), Category( " 数据服务 " ) >  _
       
Public   Property  UseOldestVersion()  As   Boolean
        
Get
            
Return  gUseOldestVersion
        
End   Get
        
Set ( ByVal  value  As   Boolean )

            
If  gUseOldestVersion  <>  value  Then
                gUseOldestVersion 
=  value
                OnEnviromentChanged()
            
End   If

        
End   Set
    
End Property



    
< Description( " 本地版本信息文件 " ), Category( " 数据服务 " ), Editor( GetType (FileNameEditor),  GetType (UITypeEditor)) >  _
    
Public   Property  VersionDateFileName()  As   String
        
Get
            
Return  gVersionDateFileName
        
End   Get
        
Set ( ByVal  value  As   String )

            
If  gVersionDateFileName  <>  value  Then
                gVersionDateFileName 
=  value
                OnEnviromentChanged()
            
End   If

        
End   Set
    
End Property

    
< Description( " 本地区划信息文件 " ), Category( " 数据服务 " ), Editor( GetType (FileNameEditor),  GetType (UITypeEditor)) >  _
Public   Property  RegionalCodeFileName()  As   String
        
Get
            
Return  gRegionalCodeFileName
        
End   Get
        
Set ( ByVal  value  As   String )

            
If  gRegionalCodeFileName  <>  value  Then
                gRegionalCodeFileName 
=  value
                OnEnviromentChanged()
            
End   If

        
End   Set
    
End Property

    
Private   Sub  OnEnviromentChanged()
        
RaiseEvent  EnviromentChanged()
    
End Sub

End Class

考虑到用户在应用的过程中会改变参数,因此建了一个事件EnviromentChanged通知服务中心环境变动了。

服务中心,类ServicesCenter
ServicesCenter.vb

Public   Class  ServicesCenter
    
Private  gEnviroment  As  Enviroment
    
Private  gRegionalCodeService  As  RegionalCodeService
    
Private  gUpdateDatabaseService  As  UpdateDatabaseService

    
Private   Const  SQLSERVER2005  As   String   =   " 9.00 "

    
Public   ReadOnly   Property  Enviroment()  As  Enviroment
        
Get
            
Return  gEnviroment
        
End   Get
    
End Property

    
Public   ReadOnly   Property  RegionalCodeService()  As  RegionalCodeService
        
Get
            
Return  gRegionalCodeService
        
End   Get
    
End Property

    
Public   ReadOnly   Property  UpdateDatabaseService()  As  UpdateDatabaseService
        
Get
            
Return  gUpdateDatabaseService
        
End   Get
    
End Property

    
Sub   New ()
        Initialize()
    
End Sub

    
Public   Function  TestConnectServer()  As   Boolean
        
Dim  mResult  As   Boolean   =   False

        
' 测试连接同时也获取SQLServer版本
        mResult  =   Me .Enviroment.LogonInformations.TestConnect()

        
If  mResult  Then
            
If   Me .Enviroment.LogonInformations.SqlVersion  <  SQLSERVER2005  Then
                mResult 
=   False
            
End   If
        
End   If

        
' 无论是否能够连接上数据库,都提供服务

        
If  gRegionalCodeService  IsNot   Nothing   Then
            gRegionalCodeService.Dispose()
            gUpdateDatabaseService.Dispose()
        
End   If

        gRegionalCodeService 
=   New  RegionalCodeService( Me .Enviroment.LogonInformations.ConnectionStringBuilder.ConnectionString)
        gUpdateDatabaseService 
=   New  UpdateDatabaseService( Me .Enviroment.LogonInformations.ConnectionStringBuilder.ConnectionString)

        
If   Not  mResult  Then
            
Me .Enviroment.DataSource  =  RegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource.离线数据优先
        
End   If

        RefleshServices()

        
Return  mResult
    
End Function


    
Private   Sub  Initialize()
        
Dim  mLocalDataPath  As   String   =  AppDomain.CurrentDomain.SetupInformation.ApplicationBase  &   " LocalData "
        
If   Not  IO.Directory.Exists(mLocalDataPath)  Then
            IO.Directory.CreateDirectory(mLocalDataPath)
        
End   If

        
Me .gEnviroment  =   New  Enviroment
        
With  gEnviroment
            .LogonInformations.Database 
=   " RegionalCodeWorks "

            .DataSource 
=  RegionalCodeCommon.Services.RegionalCodeServiceBase.DataSource.离线数据优先
            .UseOldestVersion 
=   False

            .NetRegionalCodeFileName 
=   String .Concat(mLocalDataPath,  " NetRegionalCode.xml " )
            .RegionalCodeFileName 
=   String .Concat(mLocalDataPath,  " RegionalCode.xml " )
            .VersionDateFileName 
=   String .Concat(mLocalDataPath,  " VersionDate.xml " )
        
End   With

        
AddHandler  gEnviroment.EnviromentChanged,  AddressOf  gEnviroment_EnviromentChanged

        gRegionalCodeService 
=   New  RegionalCodeService( Me .Enviroment.LogonInformations.ConnectionStringBuilder.ConnectionString)
        gUpdateDatabaseService 
=   New  UpdateDatabaseService( Me .Enviroment.LogonInformations.ConnectionStringBuilder.ConnectionString)

        RefleshServices()
    
End Sub

    
' 环境改变了更新服务有关参数
     Private   Sub  gEnviroment_EnviromentChanged()
        RefleshServices()
    
End Sub

    
Private   Sub  RefleshServices()
        
If  gRegionalCodeService  Is   Nothing   Then   Exit Sub

        
With   Me .RegionalCodeService
            .RegionalCodeFileName 
=   Me .Enviroment.RegionalCodeFileName
            .Source 
=   Me .Enviroment.DataSource
            .UseOldestVersion 
=   Me .Enviroment.UseOldestVersion
            .VersionDateFileName 
=   Me .Enviroment.VersionDateFileName
        
End   With

        
With   Me .UpdateDatabaseService
            .NetRegionalCodeFileName 
=   Me .Enviroment.NetRegionalCodeFileName
        
End   With
    
End Sub

    
Protected   Overrides   Sub  Finalize()
        
If  gRegionalCodeService  IsNot   Nothing   Then
            
Me .RegionalCodeService.Dispose()
            
Me .RegionalCodeService.Dispose()
        
End   If

        
RemoveHandler  gEnviroment.EnviromentChanged,  AddressOf  gEnviroment_EnviromentChanged
        
MyBase .Finalize()
    
End Sub
End Class

考虑到多个服务实例使用的数据集是相同的,因此我已把几个关键的数据集修改了定义,为共享的:

Private   Shared  gNetDownloadLocalDataset  As   New  Database.NetDownloadLocalDataSet

Private   Shared  gVersionDateList  As   New  VersionDateList
Private   Shared  gRegionalCodeDataSet  As   New  Database.RegionalCodeDataSet
Private   Shared  gVersionDateDataSet  As   New  Database.VersionDateDataSet

相应的,为了保证数据集数据的安全修改,对DataTableCollection做了部分修改。修改后的方法是否有效,我也不大把握。我是参考了有关代码,只是没探究到底。在此列出来:
DataTableCollection类上,

Namespace  uSystem.uData
    
Partial   Class  DataTableCollection( Of  T  As  DataTable)
     
        
Public   Sub  Clear()
            
SyncLock   Me .InternalSyncObject
                
For   Each  tableName  As   String   In  gTableNameList
                    
Dim  tmpTable  As  DataTable  =  gDataSet.Tables(tableName)
                    gDataSet.Tables.Remove(tmpTable)
                    tmpTable.Dispose()
                
Next
                gTableNameList.Clear()
            
End   SyncLock
        
End Sub

        
Public   Sub  Remove( ByVal  tableName  As   String )
            
SyncLock   Me .InternalSyncObject
                
If   Not  Contains(tableName)  Then   Exit Sub

                
Dim  tmpTable  As  DataTable  =  gDataSet.Tables(tableName)

                gDataSet.Tables.Remove(tmpTable)
                tmpTable.Dispose()

                gTableNameList.Remove(tableName)
            
End   SyncLock

        
End Sub

        
Public   Sub  Add( ByVal  table  As  DataTable)
            
Dim  tmpTable  As  T  =  CommonServices.TableConverter( Of  DataTable, T)(table)
            Add(tmpTable)
        
End Sub

        
Public   Sub  Add( ByVal  table  As  T)

            
SyncLock   Me .InternalSyncObject
                AddTable(table)
            
End   SyncLock

        
End Sub

        
Protected   Overridable   Sub  AddTable( ByVal  table  As  T)
            
' 如果已存在,则去除
             Dim  tmpTableName  As   String   =  table.TableName
            Remove(tmpTableName)

            gDataSet.Tables.Add(table)
            gTableNameList.Add(tmpTableName)

        
End Sub

        
Private   ReadOnly   Property  InternalSyncObject()  As   Object
            
Get
                
If  gInternalSyncObject  Is   Nothing   Then
                    
Dim  tmpObj  As   New   Object
                    System.Threading.Interlocked.CompareExchange(gInternalSyncObject, tmpObj, 
Nothing )
                
End   If
                
Return  gInternalSyncObject
            
End   Get
        
End Property

        
Private  gInternalSyncObject  As   Object

    
End Class
End Namespace

对于两个委托,为了规范化,我也作了修改。修改后是否规范,也没把握。

 

 

Public   Delegate   Sub  ServiceMessageEventHandler( ByVal  sender  As   Object ByVal  e  As  ServiceMessageEventArgs)

Public   Class  ServiceMessageEventArgs
    
Inherits  EventArgs

    
Private  gMessage  As   String

    
Sub   New ()
        gMessage 
=   " 待命 "
    
End Sub

    
Sub   New ( ByVal  message  As   String )
        
If   String .IsNullOrEmpty(message)  Then
            gMessage 
=   " 待命 "
        
Else
            gMessage 
=  message
        
End   If
    
End Sub

    
Public   ReadOnly   Property  Message()  As   String
        
Get
            
Return  gMessage
        
End   Get
    
End Property

End Class



Public   Delegate   Sub  ServiceProgressPercentEventHandler( ByVal  sender  As   Object ByVal  e  As  ServiceProgressPercentEventArgs)

Public   Class  ServiceProgressPercentEventArgs
    
Inherits  EventArgs

    
Private  gCurrentPercent  As   Integer

    
Sub   New ( ByVal  currentPercent  As   Integer )
        gCurrentPercent 
=  currentPercent
    
End Sub

    
Public   ReadOnly   Property  CurrentPercent()  As   Integer
        
Get
            
Return  gCurrentPercent
        
End   Get
    
End Property
End Class


目前为止的方案代码:代码

环境参数测试示图:

到目前为止,实现了整个方案的数据库和服务功能部分。
接下来的,是程序与用户的交互,也就是程序界面与数据的交互部分。

界面是否养眼,组装是否合理方便,这不是我的所能。
我做的,只是将用户想要的功能(方案分析中一开始列出来的简单需求)在界面上表现出来。

注意的,是怎样将界面与数据代码尽可能的分开。

以下我另设一个部分,叫行政区划程序界面的设计。

下一篇,行政区划程序界面的设计(一),实现界面表现的基本要点。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值