Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 从本地文件或远程URL读取数据的方法:如何传递参数?_Oop_Language Agnostic_Arguments_Overloading - Fatal编程技术网

Oop 从本地文件或远程URL读取数据的方法:如何传递参数?

Oop 从本地文件或远程URL读取数据的方法:如何传递参数?,oop,language-agnostic,arguments,overloading,Oop,Language Agnostic,Arguments,Overloading,我正在创建一个类,该类反序列化XML文件并从中创建一些对象 该方法大致如下(C#风格的伪代码): 问题是:将“神奇字符串”传递给此函数,并让它处理字符串的意图,从而为API用户提供一个易于使用的接口,这是一种良好的做法吗?或者使用两种不同的方法(一种用于本地文件路径,另一种用于远程URL)更明智 (这个问题可以更广泛地问:“我应该有一个方法接受很多参数类型,或者一个命名方法有很多重载(例如,在Python中不严格可行),或者每个方法应该以一种方式做一件事,因此我应该有更多的方法,每个方法都有一个

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

该方法大致如下(C#风格的伪代码):

问题是:将“神奇字符串”传递给此函数,并让它处理字符串的意图,从而为API用户提供一个易于使用的接口,这是一种良好的做法吗?或者使用两种不同的方法(一种用于本地文件路径,另一种用于远程URL)更明智


(这个问题可以更广泛地问:“我应该有一个方法接受很多参数类型,或者一个命名方法有很多重载(例如,在Python中不严格可行),或者每个方法应该以一种方式做一件事,因此我应该有更多的方法,每个方法都有一个名称吗?)我通常喜欢我的方法/函数做一件事。在这种情况下,我会考虑使用一个新的抽象:流。
// 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反序列化可以从流中读取(很可能它可以)您可以跳过流->字符串读取。如果内容可能很大,这可能很重要。

您能告诉我更多关于读取字符串,然后解析字符串与解析文件对象或url的信息吗?它们中的哪一个更可取?例如,python有
json.load(file\u object)
json.load(json_string)
我一直在怀疑每一个的预期用例是什么……如果在处理之前将内容读入字符串,它将保留在内存中。如果文件/http响应很大(比如1GB文件),这可能会导致问题。如果处理用户输入(来自web表单、用户文件)您应该对此做好准备。您不希望在处理大型文件/提交时应用程序爆炸。
// 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);
}