分开变与不变的代码

分开变与不变的代码

    如今,面向对象编程已成主流。不过无论面向过程,还是面向对象,其共同的目标都是代码复用。但这种代码复用的理念我们到底能使其发挥到多大的程度呢?有些时候,我们做的并不够。
有些时候我们还是下意识地倾向于代码的复制与粘贴。就拿窗体中的一个“关闭”按钮来说,多数情况下,我们可能就下意识地写下下面的代码:
    private void CloseButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }
    如果你有10个窗体,可能你会写出十段与上面类似的代码。那么我们是否曾经想过要把这么一个“关闭”动作封装起来呢?创建一个新的CloseButton类:
    class CloseButton : Button
    {
        public const string DEFAULT_NAME = "关闭";
        public Form. TargetForm
        {
            get; set;
        }

        public CloseButton() : base()
        {
            this.Click += new EventHandler(CloseButton_Click);
        }

        protected void  CloseButton_Click(object sender, EventArgs e)
        {
            if(TargetForm. != null)
                TargetForm.Close();
        }
    }
    如此一来,只需要向Form中拖入这个控件,然后设置TargetForm就行了,而这些并不需要去写什么代码。其实这做起来并不复杂,仅仅是把不变的代码封装起来以供后面使用,但有些时候我们脑子里似乎就是缺少这么一个闪念。当我在读《面向对象项目开发经验大成》这本书的时候,我突然意识到了这个问题。有时候我们仅仅是复用了.Net的控件,而对于业务逻辑的代码我们甚至是在不断重复着复制粘贴的过程,在UI中更甚。
    鄙人曾经确实经历过复制粘贴之苦,在修改代码的时候很容易漏掉某些部分。现在回想起来,经历过这些教训确实对自己的提高有好处。如果能早一点意识到封装的思路,可能当初就不会那么痛苦了。
请使用浏览器的分享功能分享到微信等