今天是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#的同步机制很多,我用的就是简单的Lock。

说一下客户端软件的缓存机制,把不常变的数据放到本地json中,这样可以直接取json而不用每次去服务端取。把一些长时间使用且在整个会话中不变的对象放到内存中,而不是每次都取服务器的数据。插件系统,是希望当更新的时候只用更新改变的dll,而不需要动其他程序集。首先说一下程序集的查找顺序,1在GAC中找,2.codebase里找,3.根目录中查找4.privatepath中查找。由于我设计那个系统界面上元素都可以在数据库中配置,且属于用户的权限。所以也可以控制到插件。

最近我辞职前这一个月主要是搞热插拔,使用的还是程序域的概念。代理代替真实的对象执行程序域内的操作,而程序域内使用反射进行不同程序集间的交互。感觉不像框架。这仅是我留下的测试代码。

还是那句话,框架靠规则,业务靠要求。好的框架及代码都是通过不停的重构完善的。

辞职了,只是在公司的码农生活告一段落,而我会更加自由的研发自己感兴趣的产品。

一个男人最重要的品质就是积极向上,路漫漫其修远兮,吾将上下而求索!

http://www.cnblogs.com/wang-charle/p/6501374.html

网友评论

更多精彩分享

学习是年轻人改变自己的最好方式-Java培训机构,青岛Java培训,青岛计算机培训,软件编程培训,seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训,Java培训学习是年轻人改变自己的最好方式