关于设计,复用,学习的杂感

关于设计,复用,学习的杂感

 

首先声明,本人是搞.net winform的,一些说法可能不大适用于BS ,如果和各位看官的winform的经验有冲突,欢迎探讨。

 

 

1.关于设计

如果你是一个真正的开发人员,在接到一个任务时,一定要从最基本的抽像做起,去分清业务,分清数据,你可以先画一两个界面 来表达一下自己的想法,但是业务逻辑的设计,一定要做到。

因为国内的软件公司 ,大部分都是中下层的小公司 ,分工时大部分都是一个人一个模块的。

一个模块,也就是说,从数据,到逻辑,到表现,都由一个人做。

这样,逻辑设计就有可能和表现模糊起来。

逻辑要好到什么程度,说一些极端一些的问题,我觉得,在一个好的winform程序里,如果逻辑层设计好了 在一个窗体中,是看不到条件判断的语句的。

比如,你判断一个操作执行的是否正确,你可以这样

 

A a  =   new  A();

if (a.foo() == true ){

}
else {

MessageBox.Show(
" 执行出错了。 " );

}

 

这样的处理,也无可厚非。

但是,我更倾向于这种

新写一个函数

 

class  A {

Public 
void  Foo(){

if (a.foo())

return ;

else

Throw 
new  Exception( " 执行出错 " );

}

 

 

之后,在窗体的程序中,你只需要这样写。。

 

try {

A a 
=   new  A();
a.Foo();

}
catch (Exception ex){

MessageBox.Show(ex.Message);

}

 

注意,我这里是winform ,因为BS下,如果考虑异常的效率 ,这样做可能不妥。

为什么要这样做,其实很简单,如果你要这个执行返回多种结果和提示。你在以后只需要改写Foo()中的throw 逻辑

 

2.关于复用

什么样是复用?我觉得一个程序员的技能好坏,就再于他对复用的理解。。说极端一些,要时刻“为了复用而复用”,在设计时,要时刻想着,我这个设计哪个东西可以抽象出来。举个例子,在winform中(不好意思,还是winform),我要让一个datagridview在第一列显示行号。

一个很简单的功能。在网上找一下,不到50行代码就能搞定(这段不贴了,网上很多)。

但是,如果再遇到呢?还找50行代码?

复制,粘贴?

一个程序员,如果有一年以上的同种开发环境的经验。他一定要有自己的控件库。。

这里注意,是控件库,不是代码库。。

拿上面的例子。

我自己建一个工程,继承一下dataGridView 如下。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
namespace SFTech.Controls
{
    
public  class DataGridView : System.Windows.Forms.DataGridView 
    {
        
public DataGridView()
            : 
base()
        {
             
this.RowHeadersVisible = true;
            
this.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;

            
this.ReadOnly = true;
            
this.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
           


        }
        
protected override void OnCellMouseDown(System.Windows.Forms.DataGridViewCellMouseEventArgs e)
        {
            
if(e.Button == System.Windows.Forms.MouseButtons.Right&& e.RowIndex >= 0){
                
this.ClearSelection();
                
this.Rows[e.RowIndex].Selected = true;
                
this.CurrentCell = this.Rows[e.RowIndex].Cells[e.ColumnIndex];
            }
            
base.OnCellMouseDown(e);
        }
        
protected override void OnRowsAdded(System.Windows.Forms.DataGridViewRowsAddedEventArgs e)
        {
            
base.OnRowsAdded(e);
            
if (Rows.Count > 0)
            {

                
for (int i = 0; i < this.Rows.Count; i++)
                {
                    
this.Rows[i].HeaderCell.Value = (i + 1).ToString();
                }

            }
        }
        
protected override void OnColumnHeaderMouseClick(System.Windows.Forms.DataGridViewCellMouseEventArgs e)
        {
            
base.OnColumnHeaderMouseClick(e);
            
if (Rows.Count > 0)
            {

                
for (int i = 0; i < this.Rows.Count; i++)
                {
                    
this.Rows[i].HeaderCell.Value = (i + 1).ToString();
                }
             
            }
        }
    }
}

以后再有类似问题,我直接用我这个dataGridViewOK了。

不光是控件复用,逻辑也能复用。

而且,在复用时,一定要想着怎么在复用时会方便,快捷。

拿用户管理来说。

Winform 用户管理很多都是菜单项什么的存在数据库里动态配置,这样很好管理

也容易复用。

但是,如果在一个新项目,要用原来的用户管理,怎么用?

加到里面,然后手工建立数据库表,对着菜单项建立各种权限?

我为什么不写一个静态类

加上函数

 

namespace  UserManage{
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种技术,我让你建个模,你还是不会,让你做个系统 ,你也不会。

我学得人应该多方面的发展。

那么,对于技术,也就是框架 ,怎么学习?

不是不学,而要学大概。

在上面三条中,技术,就相当于你的工具,当你遇到 问题时,你只要知道你要用什么工具就行了。也就是说,你要知道工具有什么特点,能解决什么问题。等到真正用时,我把工具的说明书拿来,照着使就行了。

 

 

本人不才,语言表达也一般,以上三条,希望大家沟通,欢迎拍砖。

 

 

 

 

 

 

posted @ 2009-11-15 00:38 葛云飞 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值