关于设计,复用,学习的杂感
首先声明,本人是搞.net 下winform的,一些说法可能不大适用于BS ,如果和各位看官的winform的经验有冲突,欢迎探讨。
1.关于设计
如果你是一个真正的开发人员,在接到一个任务时,一定要从最基本的抽像做起,去分清业务,分清数据,你可以先画一两个界面 来表达一下自己的想法,但是业务逻辑的设计,一定要做到。
因为国内的软件公司 ,大部分都是中下层的小公司 ,分工时大部分都是一个人一个模块的。
一个模块,也就是说,从数据,到逻辑,到表现,都由一个人做。
这样,逻辑设计就有可能和表现模糊起来。
逻辑要好到什么程度,说一些极端一些的问题,我觉得,在一个好的winform程序里,如果逻辑层设计好了 在一个窗体中,是看不到条件判断的语句的。
比如,你判断一个操作执行的是否正确,你可以这样
if(a.foo()==true){
}else{
MessageBox.Show("执行出错了。");
}
这样的处理,也无可厚非。
但是,我更倾向于这种
新写一个函数
Public void Foo(){
if(a.foo())
return;
else
Throw new Exception("执行出错");
}
之后,在窗体的程序中,你只需要这样写。。
A a = new A();
a.Foo();
}catch(Exception ex){
MessageBox.Show(ex.Message);
}
注意,我这里是winform ,因为BS下,如果考虑异常的效率 ,这样做可能不妥。
为什么要这样做,其实很简单,如果你要这个执行返回多种结果和提示。你在以后只需要改写Foo()中的throw 逻辑 。
2.关于复用
什么样是复用?我觉得一个程序员的技能好坏,就再于他对复用的理解。。说极端一些,要时刻“为了复用而复用”,在设计时,要时刻想着,我这个设计哪个东西可以抽象出来。举个例子,在winform中(不好意思,还是winform),我要让一个datagridview在第一列显示行号。
一个很简单的功能。在网上找一下,不到50行代码就能搞定(这段不贴了,网上很多)。
但是,如果再遇到呢?还找50行代码?
复制,粘贴?
一个程序员,如果有一年以上的同种开发环境的经验。他一定要有自己的控件库。。
这里注意,是控件库,不是代码库。。
拿上面的例子。
我自己建一个工程,继承一下dataGridView 如下。
以后再有类似问题,我直接用我这个dataGridView就OK了。
不光是控件复用,逻辑也能复用。
而且,在复用时,一定要想着怎么在复用时会方便,快捷。
拿用户管理来说。
Winform 用户管理很多都是菜单项什么的存在数据库里动态配置,这样很好管理
也容易复用。
但是,如果在一个新项目,要用原来的用户管理,怎么用?
加到里面,然后手工建立数据库表,对着菜单项建立各种权限?
我为什么不写一个静态类
加上函数
public static class Init{
public static void Init(String connectionstring,Menu mainFormMenu);
}
自动在数据库建立表,按照菜单Mainform.Menu生成权限,管理员组,默认管理员密码?
这个函数,可能用一小时就能写出来。
但是这一小时,为你以后每一个项目都省了一小时。
3.关于学习
很多人热衷于新技术的学习,出了.net mvc,学习一下,silverlight 学习一下。。。。
最后会很多技术,但是真正做一个项目,傻了。
不知道怎么用,不知道用到什么程度。
作为一个程序员,学习是多方面的,至少分以下三方面:
1.理论:数据结构,算法,编译,操作系统……
2.工程:软件工程,设计模式……
3.技术:语言,环境,框架……
在程序员成长的过程中,这三样一样都不可少。
但有人就偏相信于第3条的第三小款。框架。。
其实就是现在所谓的技术 什么mvc,silverlight,.net 4.0 但是学了真能用上吗?学了就真把你自己提高了?
你会N种技术,我让你建个模,你还是不会,让你做个系统 ,你也不会。
我学得人应该多方面的发展。
那么,对于技术,也就是框架 ,怎么学习?
不是不学,而要学大概。
在上面三条中,技术,就相当于你的工具,当你遇到 问题时,你只要知道你要用什么工具就行了。也就是说,你要知道工具有什么特点,能解决什么问题。等到真正用时,我把工具的说明书拿来,照着使就行了。
本人不才,语言表达也一般,以上三条,希望大家沟通,欢迎拍砖。