Markup之美,初学者应该处理好UI与业务逻辑间的关系

专家们往往鼓励写程序的时候要将界面的设计与处理业务逻辑的代码分离,这样可以提高效率,增强抽象性,易于管理。

初学C#,做练习往往喜欢做WinForm程序,但是做起来往往力不从心,因为经常把时间花在画控件上了,画着画着,心都画散了,往往忘记了自己原本的目的。

初学者往往直接在窗体上画上按钮,然后直接双击进入按钮的事件方法的编写,畅快淋漓地使用VS带来的便利。但是随着程序慢慢壮大,代码越来越膨胀,你的精神也越来越不能集中......

.net(直到2.0)VS下制作windows程序并没有提供描述界面的脚本语言,虽然提供了partial关键字以便VS自动生成创建界面的代码,不过这样修改代码也带来了不便,Form.Designer.cs也常常报错。为了提高自己代码的可管理性,你不得不改变自己的代码习惯(每个人都是这么变过来的吧:)),开始用不同的类来管理代码。

学c#一个月后,做了第一个winform程序,我学会使用这样的写法,先把控件该干的事写好,然后才画控件。

     class  Class1 {
        TextBox name;
        TextBox age;
        Button btn;
        
public  Class1(TextBox name, TextBox age, Button btn) {
            
this .name  =  name;
            
this .age  =  age;
            
this .btn  =  btn;
            
this .btn.Click  +=   new  EventHandler(SayHello);
        }
        
void  SayHello( object  sender, EventArgs e)
        {
            
string  str  =   string .Format( " Hello,my name is {0},I'm {1} years old. " ,name.Text,age.Text);
            MessageBox.Show(str);
        }
    }

不同版本:

     class  Class2 {
        TextBox mingzi;
        TextBox nianling;
        Button anniu;
        
public  Class2(TextBox mingzi,TextBox nianling,Button anniu) {
            
this .mingzi  =  mingzi;
            
this .nianling  =  nianling;
            
this .anniu  =  anniu;
            
this .anniu.Click  +=   new  EventHandler(Wenhao);
        }
        
void  Wenhao( object  sender, EventArgs e)
        {
            
string  str  =   string .Format( " 你好,我的名字叫{0},今年{1}岁. " , mingzi.Text, nianling.Text);
            MessageBox.Show(str);
        }
    }

然后再在Form上面画2个文本框1个按钮,加上几句,大功告成 =.= 如果做成自定义控件则修改太麻烦,这样可以先写功能后绑定。

     public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
            
new  Class1(textBox1, textBox2, button1);
            
new  Class2(textBox1, textBox2, button1);
            Form f 
=   new  Form();
            f.Controls.Add(button1);
            f.Show();
        }
    }

 

你会发现按钮跑到另一个Form上面了,点击按钮仍然会触发那2个事件方法。

这就对了,面向对象的语言真是很灵活,在WinForm的架构下,表面看控件是属于Form的,但其实又不是。或者说,正如你所看到的,她的“肉体”是属于Form的,但是她的“灵魂”(处于内存那块)是大家共有的。一个类创建了一个类成员,但是她是属于内存的,谁都可以使用。真正理解了这个定义,就能够在思路上将用户界面与逻辑代码分开了。至于f.Controls.Add(button1)按钮会从一个form上消失跑到另外一个,可以看出Controls.Add方法里还调用了button1.Parent.Controls.Remove(button1),只不过封装了不给你看到而已。

理解了控件是独立于所有容器而存在的,那么你就能更好地使用脚本语言来创建界面了——.net 3.0,WPF,xaml。

做程序的人是应该学习脚本语言知识的,而XML(X Makeup L)则是必选。近年来,许多新技术都极大地使用了xml技术,像Asp.net的服务端脚本<asp:XXX runat="server"></asp:XXX>,asp是个名称空间,xml虽好,不过要自己制定一套xml标记规则确实不容易,就算理解别人定义好的也不是好简单,就像asp.net,标签往往很长,又难记,html本来就是脚本语言了,还要为了生成html而再使用一种脚本语言,对于熟悉html的人来说可能有点抗拒,我就是这样,所以很难下定决心去学习asp.net....有点离题了,= =.

不过使用脚本始终是好的,web的流行html功不可没,而.net3.0以后使用xaml创建UI可以极大地提高生产效率,毕竟专心致志地画好界面是一门艺术.,虽然...xaml的标记又多又长..这是她的缺点~~~html可以使用半自动或者全手动去写,xaml就.......

不知道怎么写下去了,毕竟我也还没开始学习.net 3.0,今天是第一次写技术型文章,提笔忘字,点到即止。

最好再补一句,makeup好,makeup妙,makeup呱呱叫~~~:>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值