进行到这一步,知识管理系统Data Solution已经一共介绍了六篇文章

知识管理系统Data Solution研发日记之一 场景设计与需求列出

知识管理系统Data Solution研发日记之二 应用程序系列

知识管理系统Data Solution研发日记之三 文档解决方案

知识管理系统Data Solution研发日记之四 片段式数据解决方案

知识管理系统Data Solution研发日记之五 网页下载,转换,导入

知识管理系统Data Solution研发日记之六 窗体设计器

做程序,最终的落脚点还是在代码上。代码可以帮忙实现我们需要的功能。感谢电脑界的发明,能让我们的生活因为有代码的存在,而变得简单,轻松。

Data Solution使用Visual Studio 2010编写,目标平台是.NET 3.5,Any CPU。解决方案视图如下所示

一共有七个项目,各个项目的作用解释如下

Common和Utility Library是常用的工具类型定义,比如读取PDF,转换DOC/DOCX为RTF

Controls是窗体设计器所需要的控件,组件定义,凡是内置控件不能作为的,都选择用自定义控件

Database Enginee 是读写数据库的操作类库,基于LLBL Gen Framework

Data Loader 是插件式框架的汇总程序,它聚集了大量的Data Solution应用程序模块

Editor 是文档编辑器,RTF格式编辑器,可以编辑本地文件和服务器中的文档资料

Form Designer 是窗体设计器,我把它当成是一个代码生成器,依据组件的不同,生成界面代码。

一直以来都在研究如何写源代码的分析文章。以前写过LLBL Gen Framework的分析文章,以追踪流程,调用堆栈的方式来铺开文章,这种方法使用过好几次。这次的文章,则以总结知识要点的方式来展开,把我表达的几个知识要点理解了,再去看代码,思路会清晰很多。

嵌入的资源 Embedded Resource

在Form Designer和Data Loader中,有很多资源文件,Data Solution以嵌入资源的方式把它直接嵌入到程序集中,以减少程序运行失败的机率,下面的是组件配置文件

Assembly assm = Assembly.GetAssembly(typeof(FlexDataTable));
string file="Component.Markup.xml";
Stream input = assm.GetManifestResourceStream(Shared.ResourcePrefix+"." + file);
XmlComponent.LoadXmlComponentSchema(input);

再来看光标资源文件,它的代码是这样

private Icon GetIcon( IconName iconName )
{
string fileName = string.Format( "{0}.{1}.ICO", IconManager.iconFolderName, iconName.ToString() );
type.Module.Assembly.GetManifestResourceStream( type, fileName );
Assembly assembly = Assembly.GetAssembly(typeof(Shared));
Stream stream = assembly.GetManifestResourceStream(Shared.ResourceIconsPrefix + "." + fileName);
Icon icon = null;
if (stream != null)icon = new Icon(stream);
stream.Close();
return icon;
}

数据访问 Data Access

因为窗体设计器的部分代码是直接从代码仓库(Repository)中拷贝出来的,所以它的数据访问代码是这样

以Database驱动SqlDatabase和OracleDatase来实际的访问数据库,这种模式在.NET 2.0中已经内置了工厂模式的数据库访问代码,如下的代码所示

if (DbFactory == null)
{DbFactory = DbProviderFactories.GetFactory(providerName);
}
//SQL Server数据库
if (DbFactory is System.Data.SqlClient.SqlClientFactory)
{return new SqlDatabase();
}//Oracle数据库
if (DbFactory is System.Data.OracleClient.OracleClientFactory)
{return new OracleDatabase();
}

经过这几年的实践,逐渐发现这种代码是无用的。很少有系统的生命周期长到可以考虑升级数据库,更换数据库的地步。我见过的活的最长的ERP系统,从1998年到今天,也是被绑定在SQL Server平台上。朋友公司的一套DELPHI系统,客户非要说用ORACLE数据库,项目也被一直拖着。在网上看到一则留言说,把数据库的字段类型从VARCHAR换成NVARCHAR都不可以接受,何况是对整个数据库的完全更换。以我这里的文档系统为例,我想也很难达到把它更改为ORACLE数据库的程度,做个文档管理系统,部署起来很麻烦,肯定会把客户吓跑。

对文档数据库进行读写的新的方法,是用LLBL Gen Framework的ORM框架,我想你肯定要问效率如何了,先不要考虑效率问题,先考虑产生可以工作的代码,程序和文档。

窗体设计器 Form Designer

MSDN网站有这一篇经典的文章《用.NET Framework 2.0创建 Form设计器》,它介绍了窗体设计器的基础结构。其实以前很羡慕微软的员工,可以看到很多代码和文章,一直怀疑微软的窗体设计器有很多没有公开的内容,这导致做一个好用的设计器并不容易,窗体设计本来就是个商业的技术范畴,你不能指望像ADO.NET一样,有很多参考的资料。

如果你不懂这里面的原理,就用Google搜索,我举例说明。用Form Designer source code来找,肯定找不到什么有价值的内容,如果你换成具体的技术细节,比如custom InitializeComponet来搜索,则可以看到下面的文章

这个源于系统生成的IntializeComponet有bug,它生成的的代码如下

this.bindingsourceHeader = new System.Windows.Forms.BindingSource(this.components);
this.components = new System.ComponentModel.Container();
this.bindingsourceDetail = new System.Windows.Forms.BindingSource(this.components);

当运行这段代码,会抛出null异常,this.componets在没有定义前就被引用。借助于这个方法,我解决了这个问题。

微软的MSDN论坛,会请专业的IT编程人员,在这里解答问题,沟通讨论。这不同于我们看到的论坛,他们的定位是Professional,Support。所以如果有问题,可以在这里找到一些答案。另一个我认为很专业的论坛是stackoverflow,这里面聚集了大量的IT从业人员,Data Solution的很多思路,解决方案都是从那里得到的,感谢他们。

文档编辑器 Editor

从工作到现在,用得最多的编辑文字的控件,属微软的RichTextBox,平时我们都是用它的Text属性,如果你取它的Rtf属性,则得到的是RTF格式的文件内容,再配合CodeProject上的一些文章的指导,编辑器的代码框架如下

编辑器即可以当成WordPad的替代品,编辑本机磁盘文件,也可以编辑数据库服务器中的文档,这一点是它的威力所在。原本的Editor的方案是直接写成插件放到MS WORD中,对保存和打开文件对话框进行重写,以操作数据库服务器中的文件。这一步也并非难事,Visual Studio内置Office开发组件已经很多年了。这种方案的要求是,Data Solution的客户段中必须安装WORD,在这普通用户的机器上,不是问题,90%的电脑中,都内置了WORD。问题在于服务器中,当我把Data Solution运行于服务器中时,如果要编辑数据库服务器中的文档,则必须安装WORD,这有点不可以接受。我配置的Windows Server 2008 R2 X64,除了数据库SQL Server,对其它的组件,都是很忌讳安装的。我想,要使用Data Solution的客户,也会这样想,尽可能少的在服务器中装软件。

如果拥有了Data Solution的所有源代码,上面我列举的这些问题,也许还不是问题的起源。不同的程序员,对组件的熟悉程度不同。如果发现有问题,就调试源代码吧,调试代码可以帮忙你找到发生问题的原因。甚至你可以完全重写一套,抛弃我现在的做法,尽管Data Solution已经把这些组件,应用程序,代码都连接在了一起,做为一款知识管理系统的源代码,你可以按照你喜欢的方式对它进行重写,修补。

转载于:https://www.cnblogs.com/JamesLi2015/archive/2011/10/27/2226033.html

知识管理系统Data Solution研发日记之七 源代码与解决方案相关推荐

  1. 知识管理系统Data Solution研发日记之六 窗体设计器

    知识管理系统Data Solution已经有五篇文章对它进行介绍,可以通过下面的连接,找到前面的文章 知识管理系统Data Solution研发日记之一 场景设计与需求列出 知识管理系统Data So ...

  2. 知识管理系统Data Solution研发日记之十二 网页数据抓取Fetch,呈现Render,导出Export...

    这篇文章是对第四篇文章<知识管理系统Data Solution研发日记之四 片段式数据解决方案>的补充,提供一套完整的解决方案.请先阅读那一篇文章来了解它的原理. Rule Editor抓 ...

  3. 适合软件开发团队的知识管理系统有哪些?10大知识库盘点

    知识管理系统并没有一个统一的定义,不同的知识库工具适合的人群也不一致,所以本文将对比以下10大知识库工具(含开源.免费等):1.PingCode:2.Confluence:3.MediaWiki:4. ...

  4. 知识管理系统中的在线编辑,让共享协作更简便

    编者按:共享协作越来越被企业重视,那么如何实现企业内部共享协作呢?在线编辑是关键,本文分析了共享协作的作用,并进一步介绍了知识管理中的在线编辑功能. 关键词: 在线编辑,在线预览,资料分享,全文检索, ...

  5. 鱼和熊掌可兼得,高定制+低成本的知识管理系统

    编者按:本文从企业选择知识管理系统的困境出发,介绍了企业的两种需求,并提出了天翎KMS可以同时满足企业的这些需求,具有高定制和低成本的特点. 概要: (1)"鱼"和"熊掌 ...

  6. phpcms后台系统怎么去掉html目录_电子笔记本 | 好记性胜过烂笔头?基于python3的知识管理系统...

    要记忆很多东西,感觉自己记不住,或者总是忘记细节,怎么办? 记笔记啊,最好是电子笔记,方便查找和整理. 常言道: 好记性不如烂笔头.再好的记性,随着时间的推移都会遗忘的,除非不断地巩固.所以才有烂笔头 ...

  7. 分享制作精良的知识管理系统 配置SQL Server文档数据库 完美实现博客文章的的下载,存储和浏览...

    前一篇文章<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>已经提到如何使用Site Rebuild来下载您所喜欢的博客文章,但是还不能实现把下载的文件导入进数据库中, ...

  8. 团队协助 开源项目_Open Atrium 是一套开源的团队协作和知识管理系统

    Open Atrium 是一套开源的团队协作和知识管理系统.它能提供团队交流.文档管理.日程安排.任务跟踪等功能.支持成员分组,支持权限划分,支持邮件提醒,支持版本控制.界面颜色和Logo可以自由更换 ...

  9. CentOS7.6搭建开源WCP知识管理系统

    CentOS7.6搭建开源WCP知识管理系统 一.环境简介 1.操作系统:CentOS7.6 (minimal install) 2.依赖服务:JDK 1.8.0_212,OpenOffice 4.1 ...

  10. 《医院管理系统》项目研发总结

    <医院管理系统>项目研发总结 项目概要 系统主要功能模块有: 门诊挂号管理:主要包括病人管理导诊.门诊预约.门诊挂号.门诊分诊.挂号周计划.日排班维护.病人查询和挂号票据查询 门诊医生工作 ...

最新文章

  1. 设置访问权限_一项一项教你测等保2.0——Windows访问控制
  2. YoutubeNet的数据答疑
  3. LeetCode 1115. Print FooBar Alternately--多线程并发问题--Java解法--CyclicBarrier, synchronized, Semaphore 信号量
  4. jquery选择器:与、或逻辑
  5. 在乌班图中将py3设置为默认解释器
  6. dart 替代java_Dart与Java的语法区别
  7. html2canvas改成同步,html2canvas转为图片异步转同步问题(记录)
  8. MDB!= JMS,反之亦然
  9. EF CodeFirst 如何通过配置自动创建数据库当模型改变时
  10. F-Secure Client Security 注册机
  11. 团队管理(1)---故事与哲理(一)
  12. 【Docker】docker设置固定ip地址
  13. php5.6 mysql5.5,PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
  14. Python+大数据技术框架和数仓基础(一)
  15. python计算器程序设计课程报告_20193120 2019-2020-2 《Python程序设计》实验二报告
  16. openGL画五角星
  17. 谷歌FLAN-T5作者亲讲:5400亿参数,1800个任务,如何实现大语言模型“自我改进”...
  18. Redis源码学习(13),t_set.c 学习(一),sadd,srem 命令学习
  19. 【Unity性能优化】静态资源优化——Audio优化
  20. 任务调度+资源调度整合(学习笔记)

热门文章

  1. Typecho - MyTagCloud标签云插件
  2. chromium浏览器开发系列第四篇:如何调试最新chromium源码
  3. SonicWALL防火墙初探
  4. Zend_Db_Statement 一行无用代码
  5. 艾瑞咨询:即时通讯面临多种安全威胁
  6. 从△走进OO,走进策略模式
  7. 学习Linux的七点忠告
  8. Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=
  9. 老大让我整理下公司内部mysql使用规范,分享给大家
  10. 前后端分离后的权限控制设计​方案