多个c1s ui3.0 电信控制器器的时候 每个c1s ui3.0 电信控制器器的ui还有分离出去么

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&回《》 & & &&
EFW框架源代码下载:
& & & &EFW框架中的WinController控制器可以说是整个Winform版中最具有价值的地方,能够熟练使用它的话,可以让你写得代码结构清晰不知多少倍,真正的做到了CS开发的界面层与逻辑层的完全隔离;更重要的是改变了你写界面代码的思维,让你一次性写出功能完善的代码,真的,传统的那种事件驱动的方式编码会让你的代码变得越来越臃肿,就算你懂得不断重构你的代码,也完全避免不了出现臃肿的情况;所以必须使用WinController控制器模式从源头彻底解决这种问题;
& & & & WinController控制器与界面不一定是一一对应的,一个控制器可以对应多个界面,当几个界面的操作十分密切时就可以用一个控制器来控制它们的行为;一个界面对应多个控制器这种方式最好不要这么做,这样会让你的程序变得复杂,也破坏了业务架构与框架之间的关系,参考第十一章《EnterpriseFrameWork框架的分层与系统业务的结合》。
& & & & 本章主要内容通过解读框架源代码来学习WinController是怎么实现的,以及学习控制器这种设计模式;
本文要点:
1.如何使用Winform控制器
2.Winform控制器的设计思路
3.Winform控制器BaseController基类的实现代码
4.Winform控制器的自定义标签MenuAttribute和ViewAttribute
5.通过Winform控制器打开界面
Winform控制器源代码目录结构
EFW框架控制器设计图
1.如何使用Winform控制器
如上图,Books.Winform项目里的是界面文件,Books项目的是界面接口文件和控制器文件,frmBookManager对象继承IfrmBook接口,bookwinController对象依IfrmBook接口;
&见上图,Books实例中保存数据功能代码调用流程,界面代码frmBookManager继承了IfrmBook接口的两个方法并实现,点击保存按钮,btnsave_Click事件内并不实现保存数据的代码而只是向控制器发送一个消息,指定需要调用的方法名称bookSave,程序开始执行控制器中的bookSave方法,利用接口属性frmBook.currBook从界面获取数据,并利用框架中的ORM保存到数据库;接着调用GetBooks方法将数据显示在界面上;GetBooks方法调用后台的IBookDao对象获取Book数据,再通过frmBook.loadbooks(dt)接口方法将数据绑定到界面控件gridBook上;
2.Winform控制器的设计思路
& & & &Winform控制器的设计思路有点类似Web系统中的MVC模式,控制器处理这后台数据对象与前台界面直接的交互,利用接口从界面获取数据,再传递给后台对象处理,处理完后再利用接口将数据传递给界面控件显示;整个交互的逻辑代码是在控制器中实现的,数据怎么从界面获取与数据怎么绑定到界面控件都是在前端界面接口中实现的,而数据怎么存储到数据库与怎么从数据库获取数据都是在后端Dao或ObjectModel中实现的,当然也可以在控制器中利用oleDb直接操作数据库,但好的程序结构还是放在Dao和ObjectModel中合适些;
& & & & Winform控制器必须继承框架中的BaseController对象,还有控制器类名上要指定菜单标签MenuAttribute和界面标签ViewAttribute,BaseController对象封装了控制器的一些处理功能,MenuAttribute和ViewAttribute一个对应系统的菜单名,一个决定控制器能操作的界面对象;
3.Winform控制器BaseController基类的实现代码
因为所有Winform控制器都必须继承BaseController基类,所以我们有必要先看一下BaseController基类的代码是怎么样的;
BaseController文件
1 /// &summary&
/// Winform控制器基类
/// &/summary&
public abstract class BaseController : AbstractBusines
public AbstractDatabase oleDb
return _oleDb;
public SysLoginRight GetSysLoginRight
if (EFWCoreLib.CoreFrame.Init.AppGlobal.cache.GetData("RoleUser") != null)
return (SysLoginRight)EFWCoreLib.CoreFrame.Init.AppGlobal.cache.GetData("RoleUser");
return new SysLoginRight();
internal IBaseView _defaultV
public IBaseView DefaultView
get { return _defaultV }
private Dictionary&string, IBaseView& _iBaseV
public Dictionary&string, IBaseView& iBaseView
get { return _iBaseV }
_iBaseView =
foreach (KeyValuePair&string, IBaseView& val in _iBaseView)
//val.Value.ControllerEvent += new ControllerEventHandler(UI_ControllerEvent);
val.Value.InvokeController = new ControllerEventHandler(UI_ControllerEvent);
public CloseTab closeT
/// &summary&
/// 创建BaseController的实例
/// &/summary&
public BaseController()
/// &summary&
/// 界面控制事件
/// &/summary&
/// &param name="eventname"&事件名称&/param&
/// &param name="objs"&参数数组&/param&
/// &returns&&/returns&
public virtual object UI_ControllerEvent(string eventname, params object[] objs)
switch (eventname)
case "Close":
if (closeTab != null)
closeTab();
case "this":
return this;
MethodInfo meth = this.GetType().GetMethod(eventname);
if (meth != null)
MethodAttribute[] WinM = (MethodAttribute[])meth.GetCustomAttributes(typeof(MethodAttribute), true);
if (WinM.Length & 0)
if (WinM[0].OpenDBKeys != null && WinM[0].OpenDBKeys.ToString().Trim() != "")
List&string& dbkeys = WinM[0].OpenDBKeys.Split(new char[] { ',' }).ToList();
this.BindMoreDb(oleDb, "default");
foreach (string dbkey in dbkeys)
EFWCoreLib.CoreFrame.DbProvider.AbstractDatabase _Rdb = EFWCoreLib.CoreFrame.DbProvider.FactoryDatabase.GetDatabase(dbkey);
_Rdb.WorkId = GetSysLoginRight.WorkId;
//创建数据库连接
this.BindMoreDb(_Rdb, dbkey);
return meth.Invoke(this, objs);
return null;
/// &summary&
/// 初始化全局web服务参数对象
/// &/summary&
public virtual void Init() { }
public virtual IBaseView GetView(string frmName)
return iBaseView[frmName];
BaseController基类封装了控制器的四方面的功能:
1)数据库操作对象oleDb,这样我们可以直接在控制器方法内使用它执行SQL语句操作数据库
2)系统登录后的用户信息GetSysLoginRight,这样我们可以再控制器中很方便的使用当前登录的用户信息;
3)界面对象字典iBaseView,这属性与控制器上ViewAttribute标签配置相对应,可以从中取出配置的界面接口对象来操作界面;
4)处理界面请求控制器方法的功能UI_ControllerEvent,界面使用InvokeController向控制器发送消息,而怎么效应界面的消息在此方法中实现的,利用反射机制执行对应的控制器方法;
4.Winform控制器的自定义标签MenuAttribute和ViewAttribute
& & & & 这里的设计是这样的,一个控制器可以配置多个MenuAttribute,那么系统可以挂多个菜单,而这几个菜单都是公用这一个控制器,同样一个控制器可以配置多个ViewAttribute,控制器就可以同时操作这些配置的界面;
MenuAttribute文件
[AttributeUsageAttribute(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
public class MenuAttribute:Attribute
string _defaultN
/// &summary&
/// 菜单名称
/// &/summary&
public string DefaultName
get { return _defaultN }
set { _defaultName = }
private string _defaultViewN
/// &summary&
/// 菜单对应打开界面
/// &/summary&
public string DefaultViewName
get { return _defaultViewN }
set { _defaultViewName = }
public string Memo
get { return _ }
set { _memo = }
public MenuAttribute()
public MenuAttribute(string defaultName,string memo)
this._defaultName = defaultN
this._memo =
ViewAttribute文件
1 [AttributeUsageAttribute(AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class ViewAttribute:Attribute
private string _
/// &summary&
/// 界面名称
/// &/summary&
public string Name
get { return _ }
set { _name = }
private bool _defaultS
public bool DefaultView
get { return _defaultS }
set { _defaultShow = }
private Type _viewT
/// &summary&
/// 界面对象类型
/// &/summary&
public Type ViewType
get { return _viewT }
set { _viewType = }
private string _dllN
/// &summary&
/// 界面存放的DLL
/// &/summary&
public string DllName
get { return _dllN }
set { _dllName = }
private string _viewTypeN
/// &summary&
/// 界面类型名称
/// &/summary&
public string ViewTypeName
get { return _viewTypeN }
set { _viewTypeName = }
public string Memo
get { return _ }
set { _memo = }
5.通过Winform控制器打开界面
& & & & Winform系统打开一个界面是这样操作的,用户点击系统主界面上的菜单,框架就会调用WinformViewCreator对象来实例化控制器对象和实例化控制器配置的所有界面窗体对象,所以我们有必要看一下WinformViewCreator对象是怎么实现的;
WinformViewCreator文件
public override Object InstanceController(CloseTab close)
//加载类库
Assembly assembly = null;
assembly = Assembly.LoadFrom(AppGlobal.AppRootPath + "\\" + dllfile);
//获得控制器类(型)
Type type = assembly.GetType(controllername, false, true);
MenuAttribute[] menuAttribute = (MenuAttribute[])type.GetCustomAttributes(typeof(MenuAttribute), true);
ViewAttribute[] viewAttribute = (ViewAttribute[])type.GetCustomAttributes(typeof(ViewAttribute), true);
//ServiceAttribute[] serviceAttribute = (ServiceAttribute[])type.GetCustomAttributes(typeof(ServiceAttribute), true);
if (menuAttribute.Length & 0)
Dictionary&string, IBaseView& viewDic = new Dictionary&string, IBaseView&();
//Dictionary&string, SoapHttpClientProtocol& serviceDic = new Dictionary&string, SoapHttpClientProtocol&();
BaseController controller = (BaseController)System.Activator.CreateInstance(type);
EFWCoreLib.CoreFrame.DbProvider.AbstractDatabase Rdb = EFWCoreLib.CoreFrame.DbProvider.FactoryDatabase.GetDatabase();
Rdb.WorkId = controller.GetSysLoginRight.WorkId;
controller.BindDb(Rdb, AppGlobal.container);
controller.closeTab =//关闭窗口
for (int index = 0; index & viewAttribute.L index++)
if (viewAttribute[index].ViewType == null)
if (string.IsNullOrEmpty(viewAttribute[index].DllName))
Assembly _assembly = Assembly.LoadFrom(AppGlobal.AppRootPath + "\\" + viewAttribute[index].DllName);
viewAttribute[index].ViewType = _assembly.GetType(viewAttribute[index].ViewTypeName, false, true);
IBaseView view = (IBaseView)System.Activator.CreateInstance(viewAttribute[index].ViewType);
if (viewAttribute[index].DefaultView) controller._defaultView =
if (index == 0 && viewAttribute.ToList().FindIndex(x =& x.DefaultView == true) == -1) controller._defaultView =
viewDic.Add(viewAttribute[index].ViewType.Name, view);
//for (int index = 0; index & serviceAttribute.L index++)
SoapHttpClientProtocol service = (SoapHttpClientProtocol)System.Activator.CreateInstance(serviceAttribute[index].ServiceType);
serviceDic.Add(serviceAttribute[index].ServiceType.Name, service);
controller.iBaseView = viewD
//controller.service = serviceD
controller.Init();//初始化
return null;
catch (Exception err)
上面代码中有两点需要说明一下,首先根据菜单配置的控制器名称通过反射实例化控制器对象;
接着根据控制器的配置的ViewAttribute标签,实例化界面对接并添加到iBaseView属性中;
阅读(...) 评论()君,已阅读到文档的结尾了呢~~
公安局内务管理系统设计与实现,公安机关内务条令,操作系统设计与实现,公安系统,公安部户籍查询系统,公安系统身份证查询,公安系统网,公安网络系统,公安部户口查询系统,公安手机定位系统
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
公安局内务管理系统设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口&&&16-06-07
&&&16-03-31
&&&16-03-21
&&&16-03-21
&&&15-12-09
&&&15-11-30
&&&15-11-12
&&&16-04-05
&&&16-04-05
&&&16-03-29
&&&15-08-05
&&&15-08-05
&&&15-08-05
&&&16-06-28
&&&16-06-28
&&&16-06-28
&&&16-06-28
&&&16-04-08
&&&16-04-08
&&& 为了鼓励成绩优秀的考生,配合开展对具有发展潜质的考生进行跟踪评价,从2008年起,财政部会计资格评价中心推出了"全国会计专业技术资格考试金银榜",即在一个考试周期内全科成绩合格、总分名列全国前100名(含并列者,下同)的考生进入全国金榜,成绩名列考试所在省、自治区、直辖市及新疆生产建设兵团前30名的考生进入银榜。
优秀考生跟踪评价计划
加入《优秀考生跟踪评价计划》,即可获得《中国会计网》(电子报)阅读、职场资讯、参与组织活动及培训等服务内容。
加入条件:
*&进入全国会计专业技术资格考试"金银榜"的会计人员。
*&通过全国会计专业技术资格考核、工作业绩突出的青年会计人员。
&&&16-06-17
&&&15-12-28
&&&15-12-18
&&&15-12-18
&&&15-12-18
&&&15-12-18
&&&15-09-16
&&&15-12-18
&&&15-08-18
&&&15-08-18
&&&15-08-18
&&&15-08-18
&&&15-08-18
&&&15-05-26
&&&16-07-05
&&&16-07-05
&&&16-07-05
&&&16-05-12
&&&16-05-12
&&&15-12-28
&&&15-12-28
&&&16-07-05
&&&16-07-05
&&&16-07-05
&&&16-05-12
&&&16-05-12
&&&16-05-12
&&&16-05-12
&&&15-08-26
&&&15-08-26
&&&15-08-26
&&&15-08-26
&&&15-08-26
&&&15-05-28
&&&15-05-28
&&&15-08-26
&&&15-08-26
&&&15-08-26
&&&15-08-26
&&&15-07-02
&&&15-07-02
&&&15-05-28
--国家部委网站--
人力资源和社会保障部
工业和信息化部
国土资源部
环境保护部
住房和城乡建设部
交通运输部
--省级考试管理机构--
北京市财政局
天津市财政局
河北省财政厅
山西省财政厅
内蒙古自治区财政厅
辽宁省财政厅
吉林省财政厅
黑龙江省财政厅
上海市财政局
江苏省财政厅
浙江省财政厅
江西省财政厅
安徽省财政厅
福建省财政厅
山东省财政厅
河南省财政厅
湖北省财政厅
湖南省财政厅
广东省财政厅
广西省财政厅
海南省财政厅
四川省财政厅
重庆市财政局
贵州省财政厅
云南省财政厅
西藏自治区财政厅
陕西省财政厅
甘肃省财政厅
青海省财政厅
宁夏自治区财政厅
新疆自治区财政厅
新疆生产建设兵团财务局
--其他机构及社会团体--
会计行业管理网
财政部会计准则委员会
中华会计函授学校
北京国家会计学院
上海国家会计学院
厦门国家会计学院
中国会计学会
中国注册会计师学会
中国财经出版传媒集团
中国国家人才网
中国财经报网&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
本人文档均来自网络或原创,如出现侵权、商业广告以及各方面影响他人利益的情况,请与我留言,本人立即删除!
&#xe602; 下载此文档
正在努力加载中...
部署aruba无线控制器及无线AP
下载积分:1000
内容提示:部署aruba无线控制器及无线AP
文档格式:DOC|
浏览次数:79|
上传日期: 05:55:14|
文档星级:&#xe60b;&#xe60b;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
部署aruba无线控制器及无线AP
官方公共微信}

我要回帖

更多关于 怎么把css分离出去 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信