您的位置:首页 > 其它

WinForm 开发框架【动态读取DLL模式】

2013-04-26 18:18 253 查看
之前的那个开发框架好几个朋友都用在了项目里面,也给我提出了很宝贵的意见,虽然最近一直没有什么更新,但是针对朋友们提出的建议,我都仔细考虑了一翻,很多的意见我都融入了系统里面,将不足之处修改过来,本来想把报表的事儿给搞定,但是想了几种方案结果都不了了之。曾经有一个朋友说很欣赏我那个读取DLL文件的框架,以前我觉得写得挺乱的,代码也是比较混乱,有时候我自己翻出来居然要想很久才知道那些代码是什么意思,当时之所以舍弃了这套框架,是因为觉得整个项目的Size会越来越大,因为每一个窗体都是一个类库,然后编译为DLL文件,程序去读取并加载这些DLL文件,所以采取了直接写在竹程序里面的方式,详细介绍在这里:

/article/5007867.html

这样一来也有一个问题,主程序的EXE越来越大,我觉得理论上是这样,所以最近忙里偷闲,将原来的那套框架重新整理了一下,主要有以下几个变化:

1.每一个窗体皆为一个类库,实现相应的接口。

2.用户打开窗体的时候不是直接Open窗体,而是加载DLL文件,读取DLL文件里面的信息。

3.每一个窗体所实现的业务仍然在自己的类文件中完成。

4.只需要将生成的DLL文件放在指定的目录,供程序读取即可。

简单的说明文档

在新建的项目里面实现如下业务:

using System;
using System.Collections.Generic;
using System.Text;

using CP.Kernel.Base;

namespace sysUserGroup
{
[Serializable]
public class Plugins : IPugins
{
private FrmUserGroup f;
public void Activate()
{
f.Activate();
}
public void Dispose()
{
f.Close();
GC.Collect();
GC.SuppressFinalize(this);
}
public void Hide()
{
f.Close();
}

public string Name
{
get { return "角色资料设定"; }
}

public string GUID
{
get { return "F2080504B6DC4963BC0963FEFA0E1AAD"; }
}

public string Version
{
get { return "1.0.0.0"; }
}

public string Manufacturer
{
get { return "制造商"; }
}

public string Description
{
get { return "用于设定角色资料"; }
}

public string TCode
{
get { return "JSZL"; }
}

public string FrmUrl
{
get { return "sysUserGroup.dll"; }
}
}
}


这里入去传入进来的DLL文件:

public void  LoadDLL(string DllName)
{
try
{
if (DllName.Substring(DllName.Length - 4).ToUpper() == ".DLL")
{
DllName = DllName.Replace(".dll", "");
}

if (string.IsNullOrEmpty(DllName))
return;

if (!allenSingleton.DicLoadDll.ContainsKey(DllName))
{
IPugins objLoadDll;
if (allenSingleton.DicPugins.ContainsKey(DllName))
{
objLoadDll = allenSingleton.DicPugins[DllName];
}
else
{
objLoadDll = CPUtility.LoadDll(DllName);
}

if (objLoadDll != null)
objLoadDll.Show(dockPanel, DockState.Document);

allenSingleton.DicLoadDll.Add(DllName, objLoadDll);
}
else
{
allenSingleton.DicLoadDll[DllName].Activate();
}
}
catch (Exception ex)
{
ShowMsg(ex.Message);
}

}


这个框架比起之前的那一套,数据处理方面没有什么变化,仍然采取存储过程实现业务逻辑,程序里面基本上面看不到SQL语句;布局和风格也是沿用以前的做法,仍然是多文档的布局模式,整体效果还是比较大方的,主要的变化就是核心部分,可以说现在的这套程序跟之前的那一套核心内容完全不一样了,在耦合性方面也有一些改善。加载的窗体如下图,都是DLL:



大致的效果:







多文档布局模式预览:





明天开始五一放长假10天,然后自己再接着请了几天假,终于可以好好休息一下了,五一回来打算再好好优化一下,在这里祝大家五一愉快!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: