2010-11-25 6 views
2

このコードを書くための最適化された方法はありますか?このValidateメソッドを最適化する

public int ValidateEntries() 
    { 
     if (this.CompanyName.Length < 6) 
     { 
      MessageBox.Show("Company name must be of at least six characters.", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      return 1; 
     } 

     if (DateTime.Parse(this.FYStarting) > DateTime.Parse(this.FYEnding)) 
     { 
      MessageBox.Show("Invalid financial year period.", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      return 1; 
     } 
     return 0; //Default error code: 0 : No Error, 1 : Error 
    } 

私は念のためにすべてのエラー火災をのtry..catchブロックを紹介したいと思います。しかし、それはオーバーヘッドを作り出すでしょう。私はまた、の場合、これらを取り除きたくなります。Convert.ToDateTimeまたはDateTime.parseを:より最適化されている第三

、?

+1

最適化されたものは何ですか?また、検証メソッドでユーザーと対話してはいけません。 – recursive

+0

@再帰的:速度のためのコンパイラの最適化。私はあなたの返信の第二部分を理解していませんでした。 – RKh

+0

ここで整数の戻り値を使用することは、非常にユニードです。例外や 'bool'の戻り値のいずれかを使用する必要があります。 –

答えて

3

宣言的な検証が最適な方法ですが、あなたは現在のソリューションをオフに取り除くとクリーナーで横断的関心事を扱う取得する必要があります(あなたがEntlibで見つけることができるかのように)あなたのために働く適切な検証フレームワーク

を使用して、より簡単に一貫した方法で。

2

データクラスとUIをより分かりやすくする方法です。 IDataErrorInfoなどの特殊なインターフェイスと検証パターンを使用すると、将来コードをサポートするのに役立ちます。

2

try ... catchは比較的安いです。例外がスローされた場合にのみ高価になります。

しかし、私はGUIとロジックを混在させる方法が嫌いです。私はむしろエラーリスト(最も簡単なケースではList<string>ですが、もっと複雑になる可能性があります)に渡し、各検証句にエラーを追加します。最後に、エラーが発生したかどうかをerrorlist.Countで確認し、メッセージを表示することができます。

intが常に2つの値しか表さない場合は、boolとして使用する方がよいでしょう。

簡体例:

public class ErrorList:List<string> 
{ 
    public bool HasErrors{get{return Count>0;}} 
} 

public void ValidateEntries(ErrorList errors) 
{ 
    if (this.CompanyName.Length < 6) 
     errors.Add("Company name must be of at least six characters."); 

    if (DateTime.Parse(this.FYStarting) > DateTime.Parse(this.FYEnding)) 
     Errors.Add("Invalid financial year period." 
} 

public void CallingFunction() 
{ 
    var errors=new ErrorList(); 
    ValidateEntries(); 
    if(erros.HasErrors) 
    { 
     ShowMessage(string.Join("\r\n",errors)); 
     return; 
    } 
    DoStuff(); 
} 

あなたはまた、いくつかのヘルパー関数を作成したり、より宣言デザインを使用することができ、あなたのアーキテクチャに応じて。しかし、あなたのプログラムをよく知らなくても、より具体的なヒントを与えるのは難しいです。たとえば、私のコードでは、Formが何であり、ViewModelまたはそれ以上の低レベルの構造で動作しているのかを検証していません。

たとえば、ASP.net MVCには、検証とエラーリストを処理するためのメカニズムが組み込まれています。フレームワークが提供するものを確認してください。

+0

上記のコードは別のクラスですが、それは専門的な方法ではありません。つまり、リストにエラーコードを追加する必要があります。最後に、リストが空であるかどうかを参照してください。 – RKh

+0

検証方法以外では、リストを処理する必要があります。あなたが今持っている方法では、ユーザーはエラーごとに「OK」をクリックする必要があります。 1つ以上ある場合、彼らは迷惑になります。 – recursive

+0

はい、単純なコードです。実際には、入力フィールドの横にあるラベルにエラーを書き込むことができます。これはまた、fieldname-erressessageの対をとるようにerror-listを拡張する必要があります。または、メッセージを改行して1つのメッセージボックスとして表示することもできます。 – CodesInChaos

関連する問題