2011-02-10 19 views
4

私は、HTML文字列とHTMLドキュメントの両方を印刷する必要があるプリンタクラスを作成しています。だから、基本的にそれは得ることができます:HTML引数とファイルパス引数を送信しますか?

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

そして、私のクラスIには、以下の間で決定するんだPrintメソッドの定義の設計でそう

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

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} 
} 

一般に、これはt彼はよく練習する?最初のオプションはそれほど大きくない別の引数を必要としますが、2番目のオプションを使用した場合、実際にファイルを印刷しようとしたが不正なファイル名を使用すると間違ったものが出力されます。

+1

建物のファサードをスマート見ることができ、その名前はあなたを教えていないが、しかしそれは、いくつかの異なることを行う方法を構築するために非常に混乱になることができます彼らが正確に何をするかについては何でも。この場合、単純な文字列の印刷とファイルの開閉には大きな違い(および影響)があります。はじめに、ファイル名のプレーンテキストだけを含むHTMLはどうですか?あなたのサンプルでは、​​単純なfilePathを文字列として印刷することはできません。 –

+0

良い点、私はそのような観点からはあまり考えなかった。 – sooprise

+0

私はDisappointment氏の答えをお伝えすることをお勧めします。読んでも明らかで、何かがどう動くべきかについて混乱はありません。 –

答えて

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 
} 
+0

私は「ベストプラクティス」の答えを探しています。これは "ベストプラクティス"の意味で正しい答えですか? – sooprise

+0

私はイエスと言わなければならないでしょう - 私は福音のようなことを聞​​いていませんでしたが、他の人たちも同じように考えてみましょう。このようにして、ifまたはbetwixtには何もない、コードは明示的です。両方とも、作業の肉をしてユーザから隠されている内部ヘルパーメソッドを呼び出すだけでも、混乱から救うことができます(または、それ自体について話す可能性のあるメソッドについてのドキュメントを読むために)。 –

+0

これはいい意味です、ありがとうございます:) – sooprise

1

:私の意見では、代わりにこのような何かを行います。

しかし、何らかの理由でオリジナルのアイデアを維持したいのであれば、私は少し変更を加えます。 modeを文字列として渡すのではなく、enumとして渡します。事実、あなたはMr. Disappointmentからの提案をこれにも配線することができます。例:

​​

2番目のアイデアは、生の文字列を印刷するたびに不必要なファイルシステムチェックを実行するため、悪い考えです。より重要なのは、生の文字列を出力するときに、これが有効なファイルパスではないため、おそらく例外がスローされることです。だから、Existsのチェックがおそらく爆発するでしょう。

0

私は、2つの方法を使用することが最善の方法であることに同意します。ただし、.NETの規則には、次のメソッド名を持つことになります。ユーザーのための

public static void Print(string path) { ... } 
public static void PrintHtml(string html) { ... } 
関連する問題