1

私はEntity Frameworkを初めて使用するので、問題を解決する方法がわかりません。次のようなUserエンティティがあります。

public int ID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Checksum
{
    get
    {
        return Checksum;
    }

    set
    {
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] originalBytes = ASCIIEncoding.Default.GetBytes(this.Email);
        byte[] encodedBytes = md5.ComputeHash(originalBytes);

        Checksum = BitConverter.ToString(encodedBytes);
    }
}

フィールドChecksumにはユーザー入力がありません。私は彼が何らかの論理(彼のセッターに存在するもの)によって決定されることを望んでいます。一部のユーザーの機密データを更新する必要がある場合に、セキュリティ チェックに使用します。

私は正しい道を進んでいますか?これを行う正しい方法は何ですか?

前もって感謝します!

4

1 に答える 1

1

体のどこにも使用していないセッターはvalue、テクノロジーの誤用の指標です。フィールドが読み取り専用の場合は、getter のみを提供してください。設定されている値を破棄する予定がある場合は、setter を提供しないでください。代わりに、計算された値が依存する値を決定し、設定ロジックをChecksumセッターに移動します。

クラスを取ることは一例です。ここでの唯一の依存関係はEmailプロパティです。クラスは次のように変更できます。

public int ID { get; set; }
public string Name { get; set; }
private string email;
public string Email {
    get { return email; }
    set { email = value; UpdateChecksum(); }
}
public string Username { get; set; }
public string Password { get; set; }
private string checksum;
public string Checksum {
    get { return checksum; }
}
private void UpdateChecksum() {
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] originalBytes = ASCIIEncoding.Default.GetBytes(email);
    byte[] encodedBytes = md5.ComputeHash(originalBytes);
    checksum = BitConverter.ToString(encodedBytes);
}

UpdateChecksum別のメソッドに移動する方法に注意してください。これは、複数の依存関係がある場合に役立ちます。ロジックを個々のセッターに埋め込むよりも、メソッドに移動し、必要に応じて呼び出す方が適切です。

于 2013-05-13T15:10:52.033 に答える