按耐不住激动的心情,因为继上篇文章后,不断的完善框架,今天终于整个系统基本稳定了,就继续谈框架。
我做C#开发已经近五年了。已经爱上她了,我经常开玩笑说,写代码如同谈恋爱,关键是我想认真的做一名程序员而不是码农。
简单回顾一下,目前系统是WCF三层C/S插件系统。服务器端是WCF程序寄宿在IIS中,其中我的配置设计是长连接,客户端支持多线程,一个volatile的实例对象。客户端用Winform,其中客户端框架及规则及核心代码都是我实现编写的,顾今天只谈客户端。
什么是插件框架?一个插件是业务上可划分的模块,代码布局上是一个程序集,(当然构件系统可以对应多个程序集)。框架的作用是把程序集加载到内存,及负责程序集中的功能的路由通信。
现在的系统是使用osgi把程序集加载到内容中,因为仅是使用此功能,所以完全可以用C#中的反射程序集加载到内存,注意用LoadFile方法。
目前关于框架所设计的表有模块表,插件表,窗体表,元素表。
主界面(框架的控制中心)设计界面只有几个容器,其他全是动态生成的(模块,插件,窗体)。
说说路由通信规则吧,什么叫路由通信呢?程序跑起来之后所有的功能都加载到主界面了。而每个模块中的插件在不同的程序集中,(界面主要是动态生成的),怎么能实现从一个插件中的某个窗体跳转到主界面任意一个插件中的窗体上且带着参数传过去呢?
这就是路由通信规则,首先界面上的窗体都继承一个基类,这样我可以在基类中定义一个事件,如果在窗体中激活这个事件必须通知主界面,然后在主界面中需找要跳转的窗体。想到查找应该立马想到字典,但是字典中的值不能是一个简单的对象,必须包括模块,插件,窗体。怎么把附带的参数传给要跳转的窗体呢?应想到object类,我用的是dynamic定义(实际也是object),实参主要用匿名类对象(方便构造参数)。找到要跳转的窗体后怎么解析参数呢?我主要用反射解析对象中的属性。
再说说我这个系统中的权限吧,权限主要是界面上控件是否显示,是否启用。目前我是把界面上元素分类后存在不同的表中,然后把这些表构建成权限树,然后在用户权限那里给用户分配权限。
框架主要的已经说完了,在winform中如果用原生的控件肯定满足不了某些界面风格或功能,这样就需要做用户控件或扩展控件了。改变控件风格主要是重绘控件,控件的真正激活者是鼠标或键盘的那几个事件,来通知操作系统,操作系统再发消息到我们的应用系统,然后拦截编写处理函数实现我们的功能。
其实asp.net就是一个插件框架,它管理着我们的web应用程序。(后续我会再写一遍Web应用程序的核心功能)。
程序员最重要的就是编程思想和工作中的悟性。我偶尔还在看C语言,虽然用不上,但是我是通过C思考C#深入编程思想。
我是大专软件技术专业,2011年就考了国家软考中级职称。现在培训机构多如毛,你是否喜欢编程,是否可以一坐一天呢?是否可以坚持五年以上?别听说程序员工资高,想清楚再入行。
再次补充一下,新的应用系统一定重视pdm数据库模型,保证一直都是最新最完整的数据结构,如果想在新系统中立足,一定要控制系统的核心功能,框架,及规则(框架设计师玩的就是规则,业务是定要求不要强迫其他程序员)。代码生成规则主要是靠pdm完成的。
程序员不喜欢别人管着,对一个自觉的程序员,被人管着是不能发挥创造性的。我做这个新系统,当时也是破斧成舟,在老系统之中,和直接领导意见不统一(某些40多岁的程序员不学新技术总是夜郎自大,如果大boss再不懂技术,那这家公司会埋没很多人才,建议大boss直接管理核心的程序员像直辖市一样),我当时说如果这个系统做不出来,我直接辞职(也是经历了很多艰辛的日日夜夜,完事开头难嘛)。
写的有些乱,最后一句,你努力的时候一定要告诉自己有个人在看着你,那个人就是未来的自己。想成为技术大神的路还有很远,我们只有沉下心做苦行僧。
----纪念孤独的日子。
----苦行僧