0

我正在创建一个反序列化 XML 文件并从中创建一些对象的类。

该方法或多或少是这样的(C#风格的伪代码):

this.Load(string url_or_filename, out string file_content) {
    try { 
        string filename = url_or_filename;
        loadFile(filename, resultstring);
    }
    catch (FileNotFoundException) {
        string url = url_or_filename;          
        loadUrl(url, resultstring);
    }
}

问题是:将“魔术字符串”传递给这个函数,让它处理来自字符串的意图,从而为 API 的用户提供一个易于使用的界面,或者是有两种不同的方法更明智,一种用于本地文件路径,另一种用于远程 URL?

(这可以更广泛地问为:“我是否应该有一个接受很多参数类型的单一方法,或者一个单一命名方法的大量重载(例如,在 Python 中不严格可行),或者每个方法都应该以单一的方式做一件事,因此我应该有更多的方法,每个方法都有它的单一名称?)

4

1 回答 1

1

我通常更喜欢我的方法/函数做一件事情。在这种情况下,我会考虑使用一个新的抽象:流。

// in the same C#-pseudocode 
string load(Stream source)
{
    return source.ReadAll();
}

在调用者站点上,有人会知道它是文件还是 http 请求,因此您可以决定:

// reading from file
foo(string filename)
{
    Stream source = new File(filename).getStream();
    load(source);
}

// reading from an url
bar(string url)
{
    HttpRequest request = new HttpRequest(url);
    Stream source = request.getResponseStream();
    load(source);
}

如果您的 XML 反序列化可以从流中读取(而且很有可能),您可以跳过流->字符串读取。如果内容可以很大,这可能很重要。

于 2013-07-24T20:31:32.390 回答