易风软件库1月11日消息,总结:
工欲善其事,必先利其器。可以来自他人,也可以本身做。我在实验室的第一个项目是开发一个行业软件。和真正的商业软件相比,它的系统自身真的很复杂。但“大学不合适做软件”是真的。整个系统交互复杂,设计冗余,维护困难。项目完成后,整个系统存在于硬盘中,不再有人关怀它。虽然我只开发了其中一个模块,但还是很痛。
希望本身能有一个成熟复杂的桌面框架,处理桌面开发中遇到的大局部成绩:界面显示、数据库、插件架构、调试输入、网络衔接等。同时,尽量增加多个开发者之间的耦合。为此我理解了SharpDevelop等开源软件,但它的设计对我来说还是太复杂了。愈加强调代码重用。为什么为一个项目开发的模块不能服务于另一个项目,同时尽量增加集成的任务量?于是,从第一节研讨课的上学期开端,我就投入了第一个插件桌面框架类库的开发:XFrmWork。
如今,它作为三个项目软件的根底类库,即XMOVE、实验室中的数据发掘软件和LTE软基站仿真演示程序。
以下是基于XFrmWork-X Move Studio的软件之一:
以下,这个集合将扼要引见它的功用和完成。
二。XFrmWork的根本构造是基于WPF接口技术和。NET框架4.0。插件式构造设计。主框架包括五个类库,其称号和功用如下图所示:
大少数UI控件采用MVVM构造,界面经过数据绑定与逻辑别离。一切运用内部开源控件的人都笼统了本身的接口,可以随时运用相反功用的其他控件,下层代码不需求改动。
与此同时,其他类库也被添加到框架中,包括XFrmWork。多媒体库,公用于多媒体功用。由于没有开发过,所以这里不做引见。
三。系统特性引见-根本功用1。插件管理容器为了尽例如增加组件集成的任务量,系统采用了相似插件树的设计方案。的一切功用都经过可组装的插件衔接到系统。运用起来十分方便,只需在相应的类上添加属性标识符即可。
插件构造相似于键-值对:键是插件需求完成的接口,值是对应的插件名字典。管理器可以随时在插件字典中拔出和删除数据。至于外挂系统的详细完成,可以参考我的系列博文。
以下是插件系统在相关目录中搜索插件后构成的插件列表:
可以详细理解以后系统中一切插件字典的键值(上图中的“插件接口列表”),给出插件的加载战略和详细信息。
2.在科研和计算范畴,可以自动组装的算法组装器通常面临复杂多样的成绩,很难经过图形界面完成配置和操作。但是我借用了Labview的思想,任何复杂的算法总是可以分解成不同模块的组装。因而,我们只需求设计不同的算法模块,并定义它们的接口。用户可以依据不同的成绩组拆卸置模块,处理实践中的复杂成绩。
一个模块可以了解为一个有输出输入接口的“盒子”。一个盒子可以包括多个输出或多个输入。只要在一切输出都满足的状况下才干执行,但不能输入到其他盒子。多个盒子可以以复杂的方式组装成一个算法网络,完成自动化处置。同时,不同算法之间例如存在耦合和分层。算法管理系统将对模块实行分层和分组。不同组的模块之间没有交互,可以并行执行。异样的分组算法从第一层到上层顺次执行,相似流水线。在这篇博文中,我详细引见了它的完成:
如上图所示,数据统计输入模块和工夫序列剖析模块归在一组,但层次不同。处置时先实行数据统计输入,后果传输到工夫序列剖析。在另一组中,计算办法A和B都是C的输出,运转时,先完成A和B的处置(并行完成),当两个义务都完成后,传递给计算办法C持续执行。值得留意的是,不同的组是并行的,它们的执行互不搅扰。
3.有好的调试输入的调试,可以方便开发者和用户。通常我们运用VS自带的调试工具,但是软件发布后,我们需求一个界面输入工具。
我用log4.net组件调试输入组件,网上有很多相关材料,这里就不赘述了。以下是完成效果:
值得一提的是,该组件可以依据不同的信息级别(调试、信息或错误等)显示不同的颜色。)来提示用户。这些数据可以方便地保管为文件或传输到指定的电子邮件地址。
4.数据库和数据服务数据是软件系统的中心,作者开发了一些与数据相关的模块。
数据库笼统层(笼统数据库的详细完成),使得将来晋级其他数据库时不需求改动下层代码成为例如。数据库管理器:方便衔接、显示、导入和存储数据库数据:
数据检查器:为了方便数据开发,运用数据绑定和反射技术来检查数据。它的接口会随着不同的数据类型而静态变化。
静态查询:作者学习并整合了开源组件的一些设计思想,用户可以经过LINQ在数据集中完成自定义查询。例如,要在数据集“根本信息1”中查找性别为女性的数据集,可以写为:从性别为f的根本数据1中的数据选择数据,系统将自动解析LINQ语句并执行搜索功用。
四。系统特性引见-图形和可视化1。基于AvalonDock的VS界面布局系统的复杂软件,普通需求一个可定制的布局系统。这个框架运用AvalonDock开源软件的WPF版本,可以随时修正布局,拖听任何组件,支持不同的分辨率,甚至可以在不同的显示器上显示。同时,系统可以保管或加载保管的布局。
2.自动换肤的界面系统WPF的静态资源,让“静态换肤”成为例如,这在winform时代简直是不例如的。可以选择软件右上角的主题管理菜单,选择不同作风的界面效果。
3.在数据发掘子项目中,关系数据可视化控件需求静态显示和剖析数据之间的关系。因而,我设计了一个公用于显示关系数据的可视化控件,它具有以下功用:
可以静态定义关系点款式和线款式,可以用xaml或许C#代码定义,系统可以在运转时反映出来。它可以完成2D和3D效果。用户可以搜索、定位、缩小和拖动不同的点和画布,并在画布上缩小和减少。点散布算法支持随机点散布、FDA(强迫引导)等算法,点散布可以在不时扩展中完成静态显示,展示网络构成的进程。下图是微博的用户网络(呈星形散布)
4.统计图控件为了方便显示统计数据,我运用了开源的图表控件WPFWisifire。同时,采用接口隔离的办法简化了控件的完成。运用时,只需求传递一组KeyValuePair序列就可以完成绘制。支持柱形图、折线图、雷达图等图表。下图显示了中国注册科研项目数量的年度变化状况:
5.天文控件天文图形可以协助用户更直观地剖析数据,所以我运用开源控件GMap.Net来完成地图功用。异样,接口隔离可以用于自动定位、绘制途径、添加和删除地标等。
动词 (verb的缩写)其他特点和功用。反射减速特性为了完成更好的可伸缩性,作者在程序中少量运用了反射。为了放慢速度,作者运用了一些技术来进步反射功能,从而优化用户体验。
2.自组装菜单系统顶部的菜单也是依据插件接口自动组装的,如下图所示:
3.网络通讯库的作者经过对socket等根底函数的重新封装,提供了方便下层调用的通讯函数。
4.序列化,。NET Remoting等作者运用了多项技术,使得下层不需求思索数据存储的序列化细节,只需求调用一个函数就可以完成。关于跨进程调用,系统运用诸如。NET远程处置。这里就不赘述了。
不及物动词XFrmWork是我在。网络开发。坦率说,博客园的大神们曾经在运用或许开发比XFrmWork强很多的架构系统了。但这是我本身的系统。在不同项目需求的驱动下,我的团队推进其不时晋级。也让我学到了更多的知识。我会为它的插件搜索速度绞尽脑汁,也会吸收各种开源软件的架构精髓。其实有这样一个平台对我来说曾经足够了。假如能带入我的作品,那一定是最幸福的事。
一切的开源代码都是没有价值的,我会在“插件系统加载”和“自组装模块”的根底上持续和大家分享它的开发经历。欢送大家关注。
今天就分享到这里吧,易风软件库是一个软件分享基地,其中包括会友IM,旗语,新南北,香蕉赶集,伶信,易民购,澳派,梦幻盲盒,优品铺,千米优选,鸽欧购,乐淘淘购,狐友,微信,诚智通,嗒米购,莱迪购,新聚淘,探聊,苹果微信多开,淘客购,深聊,安卓微信多开,城言,友点赞,淘一购,亲聊,乐享购,探聊,淘个购,支付宝等社交平台的辅助功能有避雷,埋雷软件,扫尾,秒抢红包,单透软件分享。喜欢的请关注收藏,谢谢。