質問
クラスの写真があると仮定します:
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を介して写真を追加する場合、検証を行うのに最適な場所です。
よろしく、
解決
インスタンスを無効な状態にしないでください。セッターで直接検証します。それが目的です。
他のヒント
これらが唯一のオプションである場合は、プロパティセッターで。 懸念の分離により、 Save
は保存を行うべきであり、保存はしない他のもの。
また、それは財産の美しさです。フィールドのように見えますが、バッキングフィールドの値の取得と設定の背後にあるロジックを強化できます。
正確性をチェックするのに十分なデータがいつあるかによります:FileExtensionの正確性がTitleの値に依存せず、Titleの正確性がFileExtensionの値に依存しない場合、それぞれをチェックできますそれらをセッター内に。
ただし、一方が他方の値に依存しており、セッターが実行される順序がわからない場合は、両方を取得したときにのみTitleとFileExtensionを確認する必要があります。これは、保存、またはいくつかの新しいCheckメソッドにあります。
また、保存を行う前に、TitleとFileExtenstionの両方が設定されているかどうかを確認する必要があります。
つまり、要約すると、次のチェックが必要になる場合があります。
- タイトルの正確性を確認します:Title.setで
- FileExtensionの正確性を確認します:FileExtension.setで
- Title.setとFileExtension.setが実行されたことを確認します:保存中
- 「共同修正者」を確認します。タイトルとFileExtesionの:保存中
更新方法について:タイトルとFileExtenstionが既に設定された写真オブジェクトを受け取ることを理解しています。この場合、タイトルとFileExtensionが、それらを設定した人によって写真で既にチェックされていることを信頼するかどうかを決定する必要があります。信頼できる場合、上記の私の提案で何も変更する必要はありません。ただし、信頼できない場合は、[保存]でTitleの正確性とFileExtensionの正確性を確認する必要があります(または、新しいCheckメソッドでも)。
非常に詳細な説明は困難です。更新中にオブジェクトが無効な状態であることが有効であると思われる場合、Saveメソッドで検証を行う必要があります。
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;
}
あなたの質問を正しく理解していれば、セッターメソッドとストレージメソッド内から呼び出される private boolean Validate(title、fileExtension)
メソッドを使用するだけで両方を行うことができます。この検証がfalseの場合、 Exception
をスローして、そこから対処できます。