zoukankan      html  css  js  c++  java
  • Management Console 工具管理类软件通用开发框架(开放源码)

    做ERP/MIS之类的软件,通常会开发一些辅助工具来加速开发,比如代码生成器,数据字典生成工具。随着时间的积累,这类小工具会越来越多,虽然开发的速度会快,方便,但是也会因为找不到,不好查找这些小工具,产生麻烦。原因很简单,已经发了很多精力去做成了工具,自然就不会考虑用很原始的方式来完成任务。

    举例说明
    对于插件式的开发,我们通常会先做好界面功能,然后把这个功能添加到系统的功能列表中,以启用功能,为完成这个目的,可以采用如下的SQL脚本来完成

    INSERT System_Function(Module,Function,Description)

        VALUES(‘Inventory’,'ICMISR’,'Inventory Receipt’)

    这样,就把新做好的进仓单功能加到系统功能中,以启用功能。

    但情况通常没有这样简单,通常还要设置有哪些用户和角色有权限执行进仓功能,等等。

    一种改善的办法,是把这些功能都做成脚本文件,一次调用就完成功能增加,权限分配的任务

    image

    如上图,就产生了这么一个小工具. 这是很简化的情况。

    我要讲述的主题是,当积累了很长时间,手头有很多这样的小工具,如何把它们整合到一个容器中,方便调用。

    先看效果图,边看图边说
     image

    如图所示,在这里,我集成诸多工具,比如
    DataSet Reader 用于读取dataset的工具

    Translation  多国语言的翻译工具,
    StringBuilder 字符串构造工具,例如,我想把SQL语句
                        SELECT  FunctionCode FROM  dbo.AuditTrail   转化成字符串,以传递到SQL Server中

    为了集成进仓单的功能到这个工具中,需要如下处理
    image

    修改窗体的继承基类为FormBase,给窗体类添加FunctionCode的特性,这个特性用于反射查找这里的窗体

    修改ListItem.xml文件,增加一个Item项,如图所示

    image

    内容是

    <Item Index="10" Text="InventoryReceipt"  Tag="Inventory Receipt" ImageIndex="35"></Item>

    ListItem的内容,就是效果图中,要显示在Task List任务框中的内容,Text是标题,Tag是功能的FunctionCode的值,ImageIndex是图像的索引。

    其实,这里还可以做更多的控制。比如,如果没有功能的源代码,需要用反射的方式去call功能所在的程序集,为实现这个目的,还需要增加Item.Assembly以指向它所有的程序集;
    如果功能的源代码不是.NET代码所写,要支持Process.Start的方式启动工具,必要时还需要增加参数。

    再进入源代码,看看这个工具是如何构造的

    image

    MainForm是主窗体,这里采用的是Infragistics2.Win.UltraWinTabbedMdi组件,取代过时的MDI窗体组织形式,

    NewProject是Task List任务窗体,这是功能显示的集成项目,Ctrl+N启动这个窗体,ListItem.xml是它的配置项

    主窗体中的其他菜单,均没有使用

    Startup是启动时显示的主窗体,在这里,可以显示一些常见工具的快捷方式
    为了获取和Office 2007一样的蓝色主题效果,可反注释如下的代码

    ToolStripManager.Renderer = new WinUI.Misc.Office2007Renderer();
    statusStrip.Renderer = new WinUI.Misc.Office2007Renderer();

    菜单和状态栏的效果如下图

    image

    反射应用于查找窗体的特性,找出它的定义,显示出来,代码框架如下

    Assembly assembly = Assembly.GetExecutingAssembly();

    object entryForm = Activator.CreateInstance(formBaseType) as Form;

    entryForm .MdiParent = this;
    entryForm .Show();
    entryForm .Activate();
    这便是这个工具,最有价值的内容。也达到了开头提出的效果,只开发功能和配置ListItem文件,确实达到插件的目的.


    请到epn.codeplex.com上获取最新的源代码,请使用Visual Studio 2008编译。

    因图中提及的部分插件工具已经应用到实际生产中,恕不提供源代码下载。

  • 相关阅读:
    Effective C# Item27:避免ICloneable接口
    Effective C# Item28:避免强制类型转换
    Effective C# Item25:尽可能将类型实现为可序列化的类型
    Effective C# Item31:尽可能实现短小简洁的方法
    Effective C# Item26:使用IComarable和IComparer接口实现排序关系
    Effective C# Item33:限制类型的可见性
    Effective C# Item24:声明式编程优于命令式编程
    Effective C# Item34:创建大粒度的Web API
    Effective C# Item32:尽可能实现小尺寸、高内聚的程序集
    Effective C# Item21:使用委托表达回调
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/2130600.html
Copyright © 2011-2022 走看看