『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎
数据库引擎插件 在 界面上的体现
导航窗体 的 工具栏 中的 引擎下拉列表

导航窗体 的 树形控件 中的 引擎主节点

登录窗体 的 登陆面板

综上
扩展一个 数据库引擎 最终 会有三个 地方的 UI体现
而 工具栏,菜单栏,右键菜单,子节点 则有 另外的扩展 方式
具体代码

代码详解
以上图代码为例:
特性 中: Caption 将在 界面展示 时 显示的文本
Key 程序内部 处理时 的键值(不区分大小写)
DbEngineType 当前引擎的类型(和 当前类名 保持一致)
Image 数据库引擎 图标(不指定 其实也没有关系)

数据类型转换接口:
>这里就不列出 接口需要实现 的函数,只顺带说说 这个接口存在的思想:
>Laura.SqlForever 能够实现 跨数据库 的 结构迁移 数据迁移;
>但是 不同的数据库引擎 数据类型 各不相同;
>于是 Laura.SqlForever 实现了 统一类型:所有 数据库类型 和 统一类型 的 互转 是跨数据库类型的核心思想;
操作数据库结构接口:
>包括 读取 数据库 库结构,表结构 & 创建 数据库 库结构,表结构;
登陆面板获取函数 GetLoginPanel():
>该函数 将 返回一个 UI控件,这个 控件最终 被显示 到 登录窗体中;
创建主数据库节点函数 CreateDataEngineNode():
>该函数 将 返回一个 TreeNode控件,这个 主节点具体的子节点 Laura.SqlForever 不予干涉;
数据库引擎 树形节点 扩展
Laura.SqlForever 对 树形控件 主引擎的节点 其实不予干涉 —— 开发者 有 自己的自由;
但是 Laura.SqlForever 对 树形控件 的 节点扩展 也提供了 额外封装:
>以简化 扩展代码 的复杂度
>封装 多线程,在节点 展开时 才 异步获取数据,改善用于体验
>具体 是 DbTreeNode 和 DbFolderTreeNode 两个 基类
具体代码

代码 就 不予详解
>上面 IDataTableFolderNode 只是一个 标记接口(没有任何 函数),加上 这个接口 的节点 将具备 Laura.SqlForever 内置 的 右键菜单项 “新建表(N) …”;
>不继承 IDataTableFolderNode 也不会影响 程序运行,只不过 这个节点 将失去一个 右键菜单项 而已 —— 而你,可以选择 不使用 内置的右键菜单,自己扩展 右键菜单项;
> 
这里的 “新建表(N)…”是 内置右键菜单项 (只针对 IDataTableFolderNode 节点)
这里的 “刷新(F)”是 内置的右键菜单项(针对 任何 节点)
Ps. 具体更多 详细信息,可以参见 Laura.SqlForever 的详细源码
Laura.SqlForever 完全开源,任何 企业或个人 都可以 剪切,复制,删除,更改 Laura.SqlForever 的任何代码片段。
舒小龙
2014-02-12 16:38
『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎的更多相关文章
- 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件
004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的 窗口 > 关闭所有文档 这个导航栏: 在 任何程序集,任何命名空间,任 ...
- 『练手』005 Laura.SqlForever历史遗留 的 架构思想缺陷
005 Laura.SqlForever历史遗留 的 架构思想缺陷 我们 比较一下 Laura.WinFramework 和 Laura.XtraFramework 的差异: Laura.WinFra ...
- 『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)
001 Laura.SqlForever架构的基础(Laura.XtraFramework 的变迁之路) Laura.XtraFramework 到底是 做什么的? Laura.XtraFramewo ...
- 『练手』手写一个独立Json算法 JsonHelper
背景: > 一直使用 Newtonsoft.Json.dll 也算挺稳定的. > 但这个框架也挺闹心的: > 1.影响编译失败:https://www.cnblogs.com/zih ...
- 『练手』通过注册表 获取 VS 和 SQLServer 文件路径
获取任意 VS 和 SQLServer 的 磁盘安装目录. 背景需求:如果磁盘电脑安装了 VS 或者 SQLServer 则 认定这台计算机 的使用者 是一名 软件研发人员,则让程序 以最高权限运行. ...
- 『集群』003 Slithice 最简分布式(多个客户端,一个独立服务端)
Slithice 最简分布式(多个客户端,一个独立服务端) 案例Demo 展示: 我们搭建一个 可以 独立运行 的 服务端:然后 多个客户端 并发链接 这个 服务端 完成 分布式逻辑: 服务器 独立运 ...
- 『开源』仿SQLServer山寨一个 跨数据库客户端
002 Laura.SqlForever项目简单介绍 相关文章 <『练手』001 Laura.SqlForever架构基础(Laura.XtraFramework 的变迁)> <『练 ...
- [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com
肾phone的siri有用过吗?小编无聊时就撩一下她!但有个问题就是要是没有肾phone在身边怎么撩???现在有伙伴@wx_Volcano_Li76 开发一款小程序,可以等同于siri,想什么时候撩就 ...
- 关于『进击的Markdown』:第三弹
关于『进击的Markdown』:第三弹 建议缩放90%食用 我与神明画押,赌这弹markdown又双叒叕拖稿了 %%%Markdown!我的CSDN编辑器崩了呜呜呜 各路英雄豪杰,大家好! 我们要开 ...
随机推荐
- Python 模块详解及import本质
同在当前目录下的模块和包导入 模块定义 本质就是.py结尾的python文件. 用来从逻辑上组织python代码(变量,函数,类,逻辑) 文件名: test.py; 对应的模块名 : test 模块 ...
- React从入门到放弃之前奏(4):Redux中间件
redux 提供了类似后端 Express 的中间件概念. 最适合扩展的是redux中的 store.dispatch 方法,中间件实际就是通过 override redux的store.dispat ...
- Docker 新手入门
简介 如果您是 Docker 新手请您花大约三十分钟的时间来了解 Docker 相关的知识和内容. Docker 与 Linux 息息相关,因此在阅读本文档之前请您确保以下条件: 对 Linux 的命 ...
- api_request.go
&& !strings.HasPrefix(endpoint, "https") { endpoint, err = httpsEndpoi ...
- 阿里巴巴的开源项目Druid(关于数据库连接)
1 配置 和dbcp类似,druid的常用配置项如下 配置 缺省值 说明 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来.如果没有配置,将会生成一个名字,格 ...
- bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
1:快速幂 2:exgcd 3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...
- BZOJ_3191_[JLOI2013]卡牌游戏_概率DP
BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...
- luoguP2526_[SHOI2001]小狗散步_二分图匹配
luoguP2526_[SHOI2001]小狗散步_二分图匹配 题意: Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点 ...
- Laravel分页带参数的实现方法
控制器: $data['type'] = 5;$data['member_list'] = Member::orderBy('id', 'desc')->paginate(10);return ...
- rand ----MATLAB (经典)
最近一直在学习matlab,我相信有一些同学已经发现,最近更新的关于matlab的内容比较多, 希望能够帮助到未来的小学弟学妹们! 永远爱你们的 ----新宝宝 rand 均匀分布的随机数全页折叠 语 ...