分享几个重载函数设计思路

public class HttpHelper
{
    public static string Get(string url, Encoding encoding)
    {
        string result = string.Empty;
        //todo
        return result;
    }
}

以上面的类为例,若不考虑实用性,对url和encoding两个参数进行组合,Get方法可以有3个重载:

public static string Get(string url);
public static string Get(Encoding encoding);
public static string Get(string url, Encoding encoding);

显然,Get方法url参数必不可少,第2个重载方法缺少了url则实用性不高,所以:重载函数设计要兼顾到实用性。

再来看url参数,它的值是不固定的,经常变化,每次调用Get方法时都得传入;encoding参数则不一样,它只有有限的几个值,其中UTF-8又最为常用,因而它可以赋于默认值并省略,所以:值变化大的参数在每个重载方法中应该有,值变化不大的参数可以省略(使用默认值简化输写)。

改进后的HttpHelper类:

public class HttpHelper
{
    /// <summary>
    /// 重载1
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public static string Get(string url)
    {
        return Get(url, Encoding.UTF8);
    }

    /// <summary>
    /// 重载2
    /// </summary>
    /// <param name="url"></param>
    /// <param name="encoding"></param>
    /// <returns></returns>
    public static string Get(string url, Encoding encoding)
    {
        string result = string.Empty;
        //todo
        return result;
    }
}

重载1中Encoding默认使用Encoding.UTF8,用户不能对它进行修改,这样对于经常抓取非utf-8页面的用户来说,TA将不得不每次都使用重载2传入Encoding,所以:省略的参数的默认值用户应该是可配置的。

再次改进后的的HttpHelper类:

public class HttpHelper
{
    /// <summary>
    /// 默认Encoding
    /// </summary>
    public static Encoding DEFAULTENCODING = Encoding.UTF8;

    /// <summary>
    /// 重载1
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public static string Get(string url)
    {
        return Get(url, DEFAULTENCODING);
    }

    /// <summary>
    /// 重载2
    /// </summary>
    /// <param name="url"></param>
    /// <param name="encoding"></param>
    /// <returns></returns>
    public static string Get(string url, Encoding encoding)
    {
        string result = string.Empty;
        //todo
        return result;
    }
}

或许你和我一样不太喜欢在代码中特意去设置默认值,另一种方法是将默认值保存在配置文件中:

public class HttpHelper
{
    /// <summary>
    /// 默认Encoding
    /// </summary>
    private static readonly Encoding DEFAULTENCODING = Encoding.GetEncoding(ConfigurationManager.AppSettings["Encoding"] ?? "UTF-8");

    /// <summary>
    /// 重载1
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public static string Get(string url)
    {
        return Get(url, DEFAULTENCODING);
    }

    /// <summary>
    /// 重载2
    /// </summary>
    /// <param name="url"></param>
    /// <param name="encoding"></param>
    /// <returns></returns>
    public static string Get(string url, Encoding encoding)
    {
        string result = string.Empty;
        //todo
        return result;
    }
}


上一篇: HTML页面基本样式(CSS)
下一篇: 域名CNAME记录和A记录的区别
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 2710
发表评论
登录后再发表评论!