学习IssueVision,开发MyVision

原创 2005年02月26日 18:09:00

现在学到了IssueVision的一些特色,自己开发了一个东西
当然借鉴了IssueVision的很多东西
用到的多的就是Observer和Command两个设计模式
对于较简单的Command模式,我实现了通过菜单项,ToolBarButton,LinkLabel的Command模式,就是在这些事件实施表现层和业务逻辑实现层中间加了一个Commander,达到了多对一的目的,简化了代码,清晰了结构.
对于Observer模式,我现在主要是对于MainForm加了一个Subject
然后让StaffPane和InfoPane订阅这个Subject,来Observer这个Subject.从而实现界面显示的灵活性
我做的这个东西的功能是想实现一个类似Serv-U的功能
当然最重要的数据只有一个就是用户信息,如果用数据库的话只需要一个User表,我曾经想过要用一个xml文件,但是因为前段时间弄那个lib,所以就偷懒了,直接用codemaker生成了一个MyLib,然后在主Project-MyVision里引用MyLib,实现了对SqlServer数据库的操作
接下来的日子里需要做的是继续研究IssueVision里面还没有分析透但是又是他独到的地方,然后想办法加以利用,还有就是我那个serv-u在本地机器(既做服务端又做客户端)测试一点问题都没有了,但是分开在两个机器测就是不行,其中控制链路已经成功建立并成功处理了一部分命令,但是对于数据链路始终没有成功.这个问题一旦解决,整个project就没有什么深层次的技术问题了

下面是IssueVision网上搜到的特性

1. web service
采用web.config保存数据库连接字符串,即在服务器上存取数据库,对外通过web service提供服务。
理论上web service是标准的服务,所有离线处理和同步都在客户端程序中执行。

Common: 公共类, 用于数据库连接字符串的存取,并确认是否采用明文或加密串
CredentialSoapHeader: 用于验证时需要传递的soap信息,主要包括username/password
EventLogHelper:  日志记录 (在IssueVision中也有一个相同的类,为什么两者没有单独出一个dll,可能是因为防止下载时文件太大,即客户端不需要单独的DLL.)
IssueVisionService: 真正的WEB service 提供者, 在其对外的三个方法中,都需要进行验证才能使用. 主要是得到变化的DataSetIssue集合,然后同步到数据库中,并返回数据库最新的列表,同时将变化添加到日志表中
IVData: 数据库存取的类, 各个表的存取和数据变化时事件触发后的执行.
 主要的方法: GetLookupTables(), 填充Staffers和IssueTypes到DataSet中
 SendReceiveIssues(changedIssues, lastAccessed)
IVDataSet: 一个实体对象, 用于在web之间传递的对象, 即客户端和服务器之间传递的对象, 是一个xsd文件,可以直接在里面设计表结构,即存取时的表对象,XML语法格式. 在vs.2005出来之后可能要使用ObjectSpace. (faq: 是否这里的表对象必须与DB中的一致?)
SecurityHelper: 一个用于身份验证的类, 即根据提供的CredentialSoapHeader,从数据库中取得信息进行判断,如果要用windows集成或AD域认证模式,需要修改此类。
DataProtection: 数据加解密。

ThreadHelper.dll: 提供线程相关组件
 SplashScreen 闪现的屏幕
 SingletonApp 唯一程序,第二个实例不会动作
 SafeLabel -- 可在多线程下安全操作的Label
 BackgroundWorker 后台工作程序
  RunWorkerAnsy() 开始后台工作
   DoWorkEventHandler 后台执行开始事件 执行异步任务
   RunWorkerCompletedEventHandler 后台执行结束事件
  ReportProgress() 报告后台进度
   ProgressChangedEventHandler 进度改变事件 用于画进度条
  CancelAnsync() 取消后台任务
 
IssueVisionWeb :
 IssueVisionWebservices.asmx:
  IVData: 组件. 调用dataadapter实现数据操作,含业务逻辑.
  SecurityHelper: 封装了安全认证操作
 Common: 读取配置
 EventLogHelper: 辅助操作EventLog
 
IssueVision:
 WebServiceLayer: 提供WS访问的中介. URL从配置文件读取. CredencialHeader从登陆用户取得.
 UserSettings: 当前用户的状态和状态的本地缓存
 SerializationHelper: 数据到文件的加密存储
 DataProtection: 调用Win32API实现的加密解密
 LoginForm: 登录. 被MainForm调用. 窗体淡入淡出.
 IssueSubject: ISubject 业务模型Model
  SaveIssueData() 保存业务数据到本地文件
  LoadIssueData() 加载业务数据
 AppUpdator: SmartClient的关键。自动保持版本更新。

数据采用DataSet保存和传递,不论客户端还是Web服务端。
数据访问采用自动生成的DataAdapter。

IssueSubject作为整个程序的业务模型,对外提供数据、数据时间、存储、更新等动作。
窗体中的各个显示控件监听数据变化事件,有变化时调整自身需要显示的部分。

冲突检测:
客户端从Dataset.GetChanges()取得有修改的数据通过Web服务提交到服务器。
Web服务在提交用户的改动时监听DatatAdapter的UpdateError事件,把有冲突的数据放到Conflict表中返回给客户端。
实际上利用了DataAdapter的并非冲突检测功能。

WHY:
1. 客户端为什么没有使用IsolatedStorageObject来保存临时数据?
2. 冲突数据的保存是利用DataSet中新建的表Conflict。如果有N个业务表需要检查并发冲突,DS中就需要2N个表。是不是可以还放在原来的表中,只是设定一个RowError呢?
3. AppUpdater是不是可以注册到WindowsUpdate中,由系统一起完成呢?重复功能,bad smell!

IssueVision for Vs2003

  • 2008年10月30日 08:59
  • 897KB
  • 下载

IssueVision C#2005版

  • 2008年04月16日 10:15
  • 4.95MB
  • 下载

linux驱动开发学习路线

结构、操作系统、体系结构、编译原理、计算机网络你全修过 我想大概可以分为4个阶段,水平从低到高 从安装使用=>linux常用命令=>linux系统编程=>内核开发阅读内核源码 其...

IssueVision 源代码

  • 2014年06月07日 00:03
  • 1.33MB
  • 下载

IssueVision

  • 2007年12月10日 20:32
  • 1.72MB
  • 下载

动态网站开发技术学习2:VS 2010制作作第一个简单示例网站

制作一个简单示例网站的步骤:         一,启动VS 2010开发环境,选择菜单中的“文件”,选择其中的“新建”,再选择“网站”,会弹出”新建网站“对话框。         二,在“...

IssueVision2005

  • 2008年06月14日 15:24
  • 1.92MB
  • 下载

oracle开发学习资料

  • 2017年11月01日 18:25
  • 49KB
  • 下载

GTK3学习笔记1 安装及开发配置

GTK3是GTK的较新版本,但系统性的教程和笔记不多,下面是我从自己新浪博客转来的笔记。希望这次能把学习过程写的完整和持久些。 这次的笔记不同于之前关于GTK2的,抛弃Linux,只以Windows为...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习IssueVision,开发MyVision
举报原因:
原因补充:

(最多只允许输入30个字)