zoukankan      html  css  js  c++  java
  • 设计由何而来


    设计由何而来

    设计,从何而来?是需求。是重构。

    设计原则是系统设计的灵魂,而设计模式是系统开发的模板,灵活自如的应用才是设计以不变应万变的准则。例如,实现一个用户注册的方法,首先会想到:

    //初次设计

        public void Register(string name, Int32 age)

        {

        }

    在一定的需求条件下,这个方法已经能够经受系统的考验,安全而平稳地向数据库中不断插入新的用户信息。然而,当需求发生变化时,你可能不得不对此做出调整,而我们就将这种调整称为重构。但是重构远不是扩充,而是设计。例如,现在的注册项发生了变化,还需要同时注册性别、电话,没有设计的调整,就被实现为:

    //需求变更

        public void Register(string name, Int32 age, bool isMale, Int32 phone)

        {

        }

    通过重载方式,一定程度上解决了这一问题,然而这种不能称为重构的调整,至少存在以下的弊端:

    ·  有新增的注册信息时,还要通过不断地重载Register方法来实现更多信息的扩展。

    ·  方法Register的参数列表实在太长了,这不是优雅的代码实现。

    ·  需要修改系统中相关的方法调用来适应新的重载方法。

    僵化的调整失去了设计的灵活性,没有思考的程序只能使程序的扩展和维护变得不可收拾,其实对于上述问题,只需要进行简单的重构,就可轻松避免上述3个弊端,实现更加柔性的系统。例如,简单重构如下:

    public class UserInfo

        {

            public string Name { get; set; }

            public Int32 Age { get; set; }

            public bool Gender { get; set; } 

        }

    通过将用户信息封装为一个类,实现更加简单的参数列表,同时其带来的好处还远不止避免了上述3个缺陷,而且能带来对用户信息的封装,实现更可靠的信息隐藏和暴露:

    ·  可以通过字段和属性封装,实现对于成员的只读、可读可写权限的控制。.NET 3.0的自动属性为属性封装实现了更为优雅的语法游戏,这些特性让C#成为更具有吸引力的高级语言(详见13.2节“赏析C# 3.0”):

    //定义可读可写属性

        public string Mobile { get; set; }

     

        //定义只读属性

        public string Password { get; private set; }

    ·  实现一定的逻辑封装,例如对于电子邮件,可以检查其合法性:

    private string email;

     

        public string Email

        {

            get { return email; }

            set

            {

                string strReg = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

     

                if (Regex.IsMatch(value, strReg))

                {

                    email = value;

                }

                else

                {

                    throw new InvalidCastException("Invalid Email Address.");

                }

            }

        }

    那么,设计是如何实现和建立的呢?答案就是面向对象。正如上述演化过程一样,其中应用了面向对象中的封装要素,完成了更加柔性的设计。在1.3节“封装的秘密”中,我们就对封装展开了详细的探讨,基于实例的应用和对.NET实现本质的分析,能够更加强化对于面向对象基本要素的理解。

    这些面向对象的思想和应用,来自于实践,完善于重构。

     

    本文节选自《你必须知道的.NET(第2版)》一书

    图书详细信息:http://www.cnblogs.com/broadview/archive/2011/08/09/2132689.html

  • 相关阅读:
    致我的2018 你好2019
    第十四分块(前体)(二次离线莫队)
    [Ynoi2019模拟赛]Yuno loves sqrt technology II(二次离线莫队)
    [Ynoi2015]此时此刻的光辉(莫队)
    python+selenium+Firefox+pycharm版本匹配
    IntelliJ IDEA 配置Maven
    Jmeter如何监控服务器性能
    fiddler工具
    关于Python安装官方whl包和tar.gz包的方法详解
    浅析Web Services
  • 原文地址:https://www.cnblogs.com/broadview/p/2133947.html
Copyright © 2011-2022 走看看