拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PortProxyGUI数据层设计揭秘:SQLite配置数据库与自动迁移机制的完整实现

PortProxyGUI数据层设计揭秘SQLite配置数据库与自动迁移机制的完整实现【免费下载链接】PortProxyGUIA manager of netsh interface portproxy which is to evaluate TCP/IP port redirect on windows.项目地址: https://gitcode.com/gh_mirrors/po/PortProxyGUIPortProxyGUI 是一款用于管理 Windowsnetsh interface portproxy的图形化端口转发工具它背后隐藏着一套精心设计的SQLite 配置数据库与自动迁移机制。本文将带你从数据层源码出发揭秘 PortProxyGUI 如何把端口转发规则、窗口偏好等配置持久化到本地数据库并在版本升级时安全地完成数据结构自动迁移。无论你是想深入理解这款工具的实现原理还是想学习桌面应用数据库设计的最佳实践这篇文章都值得一读。PortProxyGUI 是什么先认识这款 Windows 端口转发工具PortProxyGUI 是netsh interface portproxy命令的图形化管理器用于在 Windows 上实现 TCP/IP 端口重定向。普通用户不必再记忆复杂的 netsh 命令只需在图形界面中点击即可完成规则的增删改查。从主界面可以看到每条规则包含 Type转发类型、Listen on监听地址、Listen port监听端口、Connect to目标地址、Connect port目标端口以及 Comment备注等字段并支持分组管理例如示例中的 Default 组与 Database 组分别管理远程桌面与数据库服务的转发。SQLite 配置数据库存放在哪里配置文件路径详解PortProxyGUI 将全部配置持久化到一个SQLite 数据库文件中路径为[我的文档]\PortProxyGUI\config.db这个路径由 ApplicationDbScope.cs 中的AppDbDirectory与AppDbFile两个静态字段定义通过Environment.GetFolderPath(MyDocuments)动态获取用户的我的文档目录再拼接PortProxyGUI\config.db。数据库首次使用时若文件不存在会自动创建目录与数据库文件然后立即执行迁移逻辑确保库结构始终与当前程序版本匹配。三大核心数据表规则、配置与迁移历史的完整设计打开config.db你会发现其中主要有三张表它们构成了整个数据层的地基1. Rules 表——端口转发规则的主仓库Rules 表是 PortProxyGUI 最核心的数据表字段设计如下字段类型说明Idtext主键GUID 字符串Typetext转发类型如 v4tov4ListenOntext监听地址*表示任意ListenPortinteger监听端口ConnectTotext目标地址ConnectPortinteger目标端口Commenttext备注说明v1.3.0 起Grouptext分组名v1.3.0 起此外Rules 表上还建有一个IX_Rules_Type_ListenOn_ListenPort唯一索引保证类型 监听地址 监听端口三元组不重复。对应的实体类定义在 Rule.cs 中其中Valid属性用于校验监听端口与目标端口是否为正数EqualsWithKeys方法则基于三个关键字段比较规则是否重复。2. Configs 表——窗口状态与界面偏好的记忆体Configs 表采用通用的Item / Key / Value键值对结构用于保存窗口尺寸、列表列宽等 UI 状态。例如MainWindow 的 Width 与 Height 记录主窗口大小PortProxy 的 ColumnWidths 记录端口转发列表各列的宽度数组。读取时AppConfig.cs 将这些行数据组装成AppConfig对象并用正则表达式解析[24, 64, 140, ...]格式的整数数组保存时则反向把对象序列化回 SQL 的 UPDATE 语句。3. __history 表——自动迁移的版本账本__history 表记录每次已执行的迁移记录包含MigrationId迁移编号形如时间戳与ProductVersion对应的软件版本号两列。程序启动时会读取最后一条记录作为判断还需要执行哪些迁移的起点。自动迁移机制如何工作一步步看懂升级流程PortProxyGUI 的数据库自动迁移由 MigrationUtil.cs 驱动核心逻辑分三步确保历史表存在若__history表不存在则创建它并插入一条000000000000 / 0.0的初始记录版本兼容性检查将数据库记录的版本号与程序集版本比对若数据库版本更高说明用户用旧版程序打开了新数据库此时会弹出升级提示逐条执行待迁移项从当前记录的 MigrationId 开始跳过已执行的迁移依次执行后续迁移中的 SQL 脚本每完成一个迁移就向__history写入新记录。迁移脚本以DictionaryMigrationKey, string[]形式内嵌在源码中形成了一条清晰的演进时间线202103021542v1.1.0创建 Rules 表与唯一索引202201172103v1.2.0新增 Note 与 Group 两列202202221635v1.3.0将 Note 列改名为 Comment通过建新表 → 拷数据 → 删旧表的方式重构表结构202303092024v1.4.0新增 Configs 表并写入默认的窗口与列宽配置。这种增量迁移 版本账本的设计让老用户升级软件后数据库可以无缝衔接新用户则从零开始一键初始化兼顾了向后兼容与平滑升级。规则数据的增删改查数据层如何与界面联动ApplicationDbScope 继承自SqliteScopeApplicationDbScope基于 SQLib.Sqlite 库为上层提供了完整的规则操作 API查询Rules属性一次性取出全部规则GetRule按类型、监听地址与端口精确查找新增Add方法为规则生成 GUID 主键并插入更新Update按 Id 更新规则的关键字段删除Remove按 Id 删除记录。主窗口 PortProxyGUI.cs 在启动时通过 Program.cs 中的ApplicationDbScope.FromFile(...)获得全局数据库实例Database所有界面操作都经由这一入口完成读写。配置数据库的导入与导出数据备份一键搞定从 v1.4.0 开始PortProxyGUI 支持配置数据库的导入与导出。导出时直接调用File.Copy将config.db复制到用户指定位置导入时则通过ApplicationDbScope.FromFile(fileName)打开外部数据库文件——注意这个工厂方法会先自动创建缺失的目录与文件并执行一次迁移因此即使导入的是旧版本的数据库也能被自动升级到当前版本兼容性极佳。小结一套值得借鉴的桌面应用数据层范式通过本文的拆解可以看到PortProxyGUI 的数据层设计虽然简洁却处处体现着工程智慧用 SQLite 单文件承载全部配置路径固定且易于备份用__history账本式的自动迁移机制优雅地解决版本演进问题用键值对表灵活存储 UI 偏好。对于想要构建带本地持久化的桌面应用开发者来说这套SQLite 配置数据库 自动迁移的组合拳是一个非常值得参考的完整实现。【免费下载链接】PortProxyGUIA manager of netsh interface portproxy which is to evaluate TCP/IP port redirect on windows.项目地址: https://gitcode.com/gh_mirrors/po/PortProxyGUI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门