发送HTML参数和文件路径参数?

时间:2011-02-10 18:26:18

标签: c# methods arguments class-design

我正在创建一个需要打印HTML字符串和HTML文档的打印机类。所以基本上它可以得到:

Printer.Print("<b>Hello world</b>");

Printer.Print(@"C:\hello.html");

因此,在设计我的类时,Print方法定义我决定在以下内容之间:

public static void Print(string inputString, string mode){
    if(mode=="htmlString"){//Print the string itself}
    else if(mode=="htmlFile"){//Print the document in the filepath}
}

或者

public static void Print(string inputString){
    if(file.Exists(inputString)){//Print the document in the filepath}
    else{//Print the string itself}
}

总的来说,哪种做法更好?第一个选项需要另一个不太好的参数,但是如果我们使用第二个选项,如果我们打算实际打印文件但使用不正确的文件名,它将打印错误的东西。

3 个答案:

答案 0 :(得分:5)

很多时候,偶然事件的空间太大,特别是在这种情况下你必须根据输入确定如何行动,然后进一步做验证处理(即File.Exists) ),它正在为误报而哭泣。在我看来,做这样的事情:

public static void PrintString(string input)
{
    //print the string, knowing precisely this is the intent,
    //and if not, it's what you're going to do anyway!
}

public static void PrintFile(string fileName)
{
    //no qualms here, you're going to print a file
}

答案 1 :(得分:1)

我建议您选择Disappointment先生建议的设计。

然而,如果出于某种原因你想保留原来的想法,我会稍作修改。而不是将模式作为字符串传递而不是将其作为枚举传递。事实上,你可以将Disappointment先生的建议连接到这个问题上。例如

public enum PrintMode
{
  File,
  Raw
}

public static void Print(string printData, PrintMode mode)
{
  if(mode == PrintMode.Raw)
  {
    //Print the string itself
  }
  else if (mode == PrintMode.File)
  {
    //Print the document in the filepath
  }
  else
  {
    throw new ArgumentException("Invalid print mode specified");
  }
}

public static void PrintString(string input)
{
  Print(input, PrintMode.Raw);
}

public static void PrintFile(string input)
{
  Print(input, PrintMode.File);
}

您的第二个想法是个坏主意,因为每当用户打印原始字符串时您都会执行不必​​要的文件系统检查。更重要的是,它可能会抛出异常,因为在打印原始字符串时,这将不是有效的文件路径。所以Exists检查可能会爆炸。

答案 2 :(得分:0)

我同意使用两种方法是最好的方法。但是,.Net约定将具有以下方法名称:

public static void Print(string path) { ... }
public static void PrintHtml(string html) { ... }