1

あなたがクラスの写真を持っていると仮定します:

class Photo
{
  public string Title {get; set;}
  public string FileExtension {get; set;}
  public void Save() 
  { 
    // Save to backing store here 
  }
}

値が正しく設定されているかどうかを確認するのに最適な場所です。プロパティ セッターまたは Save メソッド内。

編集: Update メソッドの場合はどうなりますか? PhotoManager.Add(Photo p) などのメソッドを使用して、PhotoManager を介して写真を追加する場合は、検証を行うのに最適な場所です。

敬具、

4

6 に答える 6

2

これらが唯一のオプションである場合は、プロパティ セッターで。関心の分離は、それが節約をSave行うべきであり、それ以外のことではないことを示しています。

また、それはプロパティの美しさです。これらはフィールドのように見えますが、バッキング フィールドの値の取得と設定の背後にある拡張ロジックを持つことができます。

于 2009-03-02T12:25:41.430 に答える
2

インスタンスを無効な状態に陥らせないでください。セッターで正しく検証してください。それがその目的です。

于 2009-03-02T12:27:15.840 に答える
1

正確性を確認するのに十分なデータがいつあるかによって異なります。FileExtension の正確性が Title の値に依存せず、Title の正確性が FileExtension の値に依存しない場合は、セッター。

ただし、一方が他方の値に依存し、セッターが実行される順序がわからない場合は、両方を取得した場合にのみ Title と FileExtension を確認する必要があります。これは、Save またはいくつかの新しい Check メソッドで行うことができます。

また、保存を行う前に、タイトルとファイル拡張子の両方が設定されているかどうかを確認する必要があるかもしれません。

したがって、要約すると、次のチェックが必要になる場合があります。

  • タイトルの正確性を確認します: Title.set 内
  • FileExtension の正確性を確認します: FileExtension.set 内
  • Title.set と FileExtension.set が実行されたことを確認します。
  • タイトルとファイル拡張子の「相互一致」を確認してください: 保存で

Update メソッドについて: Title と FileExtension が既に設定された Photo オブジェクトを受け取るとのことですが、この場合、Title と FileExtension が、設定した人によって Photo で既にチェックされていることを信頼するかどうかを決定する必要があります。信頼できるのであれば、上記の私の提案を変更する必要はありません。ただし、信頼できない場合は、Save で (または、新しい Check メソッドで) Title の正確性と FileExtension の正確性も確認する必要があります。

于 2009-03-02T12:57:13.427 に答える
0

細かいことで言うのは難しいです。更新中にオブジェクトが無効な状態にあることが有効であると思われる場合は、Save メソッドで検証を行う必要があります。

于 2009-03-02T12:26:21.990 に答える
0

あなたの質問を正しく理解していればprivate boolean Validate(title, fileExtension)、セッター内から呼び出されるメソッドとストレージメソッドの両方を単純に実行できます。この検証が false の場合、 をスローExceptionしてそこから対処できます。

于 2009-03-02T12:26:22.923 に答える
0
public void Save()
{
  try
  {
    // saving
  }
  catch(Exception ex)
  {
    MessageBox(ex.Message); // roughly
  }
}

また

public void Save()
{
  if(!IsDataValid) // !(String.IsNullOrEmpty(this.Title) && String.IsNullOrEmpty(this.Extension))
  {
    throw new Exception(); //in fact you need to throw something more concrete
  }
  // saving
}

また、次を使用できます。

public string Title { get; private set; }

public string Extension { get; private set; }

public Photo(string title, string extension)
{
  this.Title = title;
  this.Extension = extension;
}
于 2009-03-02T12:29:55.833 に答える