今天是2017-03-04,我1号辞职的,今天第4天没上班了。在公司我工作也刚好5年了,这5年来换了几个工作,但是中间没有停留超过1个月的。我虽换工作频繁,但是走的一直是技术路线,且都是C#桌面软件开发。辞职的时候,我的理由是,我对业务根本没兴趣,走的就是技术路线,而公司还是传统的软件开发,技术上还是采用保守的态度。公司是做业绩盈利的不可能让程序猿自由的写感兴趣的代码的。一个做delphi开发的项目经理带C#团队,一直强调快速开发,最后出的产品问题不断,这种种的问题,只有在公司中存在。

  闲话少扯,继续说框架,上次的框架又经过我自己的不断重构,加入了路由通信机制,多线程异步加载,同步控制,替换掉osgi加载程序集等功能。下面分别说明。

路由通信:程序集A中的a对象,想调用程序集B中的b对象,通过主界面去找b对象,而主界面是完全动态加载及动态控制的,主界面分模块,插件,窗体。

a,b分别属于不同模块,不同插件的不同窗体,a怎么调用b直接在主界面上切换,而不是弹出窗体,这样的机制就是路由通信,通信的意思就是需要传递参数。

a只用告诉主界面,我带着参数信息需要找b,剩下的工作由主界面完成。字典是查找最快的数据结构,那就需要把b窗体的插件,模块维护成字典。(主界面上所有的窗体对象都需要这样的字典维护)。C#中的消息被封装成事件了,所以需要把窗体的事件处理函数放在主界面那里管理,窗体a只用触发事件,由订阅的主界面去处理即可。参数为了统一,我采用的是dynamic对象,接收窗体再反射解析对象。

  一个软件从登录到主界面,用户肯定是不愿意等待的,意思是进入主界面越快越好,但是主界面动态构建,逻辑数据复杂的话,肯定加载缓慢,且登录逻辑也需要判断很多条件,及整个系统的一些初始化工作。在登录界面显示前就开一个线程跑主界面的数据,在登录界面出来后再跑一个线程取登录界面的数据。登录界面用this.Update()在shown事件中,意思是登录界面立刻出现,然后跑登录界面的数据。【还有一种办法是发用户消息,用户消息会在一个线程上执行,在执行Load事件后,立刻更新界面this.Update(),再执行消息的处理过程。这样可以把界面与加载分开处理。】在登录成功后,再跑一个线程取一些缓存数据。

假如主界面出来后,如果开始跑主界面数据的线程还没执行完,是需要同步控制的,当然C#的同步机制很多,我用的就是

网友评论