WPF 软件开发心得
wpf 是C#开发的一个框架是,是一套基于XML、.NET Framework、向量绘图技术的展示层开发框架。
初次接触
我最开始是写python的,就会个爬虫,然后莫名奇妙的就开始做C#了,开发WPF。
最开始用了一个月熟悉C# ,然后用了一个月写了一个WPF 的Demo ,然后就是根据原有的项目代码进行重构。
现在回想起来那段时间写的东西真的是不好看,也不实用,就是最基本的按钮点击跳转 ,绑定个数据之类的。
重构阶段
大概过了7个月的样子,我的第一份作品用在了现场实施上面,软件可以正常运行,这个时候我开始在优化代码结构,合并同类项目,然后优化项目结构,当时的时间还是满充分的,花了2个月,代码改了两版,大概把一份项目的工作周期从一个月优化到1周。
这个时期还是显得很稚嫩,完全不像是一个程序员,还是没有项目的意识,没有一个良好的代码体系。
然后又花了二个月,开始把代码按照工程项目的开发方式重构3.0 ,该封装的封装。该独立出来的独立出来,整了一个项目工作的雏形出来。在日常工作之余。
此后就不算是新手了,算是初级程序员,也有新人要带一带。恰好碰到了一个新项目。直接在原有的基础上重开了一个新的,依据项目雏形重绘的代码。
代码要比原有的代码更精简,许多不必要的部分都剔除了,然后反过来改原来的代码。
不过此阶段的代码功底还是偏弱,萌芽阶段。
这个项目持续的周期很长,东西不难,天天出差,出去就继续优化这个结构,把简单开发周期从5天优化到3天。
此阶段完成的事情就是在WPF 框架的基础上,封装出来一个常见的工程文件,并定义相关基础类。就相当于是一个Java 的实际项目框架,python 的Scrapy 。许多东西的模板都做好了,只需要复制粘贴在对映的位置就可以了,很简单的一个特例化工程开发。
同时拆分原来合并在一起的项目。期间也参考了成熟的项目架构,定制化了 Base,Comom,Util,等一些乱七八糟的东西 。
这个阶段最重要的就是工程的思想,做的东西,不仅仅是要自己能够开发,还要能分出去,双方同时开发,或者离职了交付给他人的时候也能看得懂。
融汇阶段
最近处在的阶段就是融汇阶段,算是在从初级开法迈向中级开发,开始去考虑性能的问题,如何写出来高质量的代码,如何去封装代码结构。会去考虑硬件和其他软件的调用。
软件开发,框架最先,除了软件框架,还有布局框架。
一个完整的软件界面,有任务栏,菜单栏,侧边栏,状态栏,主窗口,其中这些里面,除了主窗口,其他的都可以缩小,甚至忽略。
我之前做的特例化开发就是只有主窗口和状态栏,写的就是很简单。
这其中的每一个部分的开发逻辑,都不是很简单,都可以做到很复杂。
比如任务栏的自绘,同时保证具有高性能。现在的市面上的软件已经基本没有多少上面的界面是windows 原生的了,原生的丑,最关键的是,原生的状态栏会让整体的界面变得臃肿,每多一个固定的状态栏的位置,主界面就少一点空间。因为除了必要展示信息,其他的软件界面,都需要为软件本体保留。
比如菜单栏的状态绑定和全局命令
自带的菜单栏的颜色也不是很好看,重绘的话要如何调节其中的每一个参数的信息?
我在做这个的重绘的时候,接触到了wpf 软件开发最重要的核心不见,xml 原生框架,vs 根据这个原生的框架信息,参考自己写的命令参数,渲染出来具体的画面。根据他的写法,就可以手动重绘任何一个自己需要的部件。
比如侧边栏的工具属性、
侧边栏是很多的软件已经淘汰掉的功能,但是比如360、edge 就保留这个元素,现在侧边栏的很多的元素信息已经被玩出来了花,比如微信的写法等等,侧边直接做成按钮,可以点击跳转到一些界面
比如状态栏的自动现实
状态栏本来应该是独立的组件,只需要显示需要现实的信息即可,但是如何把这个模块写的有新意呢?
像是chrome 已经不在主动显示许多元素,把最主要的空间留给使用者,但是同时也保留了这些界面属性,可以需要的时候显示出来。
像是vs中,把底部状态栏,同时添加上菜单的熟悉,可以在底部进行控制,而不是仅仅是展示信息。
播放器的调用与销毁
各种功能按钮,打印等
设置等等
软件开发,对接的部分只占据软件开发的一小部分,一个完善的框架应该可以对接任何一种接口。就是MVVM 开发的理念,分离开发,接口是接口的部分,控制是控制的部分,展示是展示的部分。
展示不仅仅是为了某一个特例化软件做的特例化开发。
软件的基础框架是可以进行复用的。但是高级功能不行,对于高级功能而言,其开发流程往往是一个大型团队对其进行维护和更新。比如Google 浏览器,比如阿里云。微信只是一个小团队,但是围绕微信做的一系列的软件硬件的开发,就是一个庞大的团队。
比如微信登录,微信公众号,微信小程序。微信现在是一个框架,再接入更小型的团队,自身本身并不是一个庞大的怪物。
我把这些都考虑完全之后,我应该就是一个完整的中级程序员了。
展望
高级
高级程序员需要的能力从我的角度来看,就是写任何的语言都是一种工具,为了实现结果的工具,可能会很多的语言,也可能不会,但是一法通百法通。
能够解决一些和逻辑没有关系的问题,比如用户环境和自身开发环境不一致导致的不能使用。比如系统引起的内存泄漏,软件崩溃。比如硬件所造成的软件BUG。
或者是在某一个领域只手遮天。
顶级。
感觉语言不好用,自己会开发一套,感觉底层写的不好,自己重写一遍。
我现在做的一部分的工作是架构的,但是不全是,架构需要考虑的就不是一个语言,架构提出的是一个解决方案,可能是多个语言协同开发,同时包含硬件的部分。我需要做的只是一个语言下,软件开发需要处理的部分。
初级干活就行,中级要思考,高级要解决。