1

システムにはアカウントがあり、各アカウント(ユーザー)が同意する必要のある条件があります。将来、条件が変更された場合、ユーザーはアラートを受け取り、ユーザーの選択(同意する/同意しない)に基づいて、アカウントはアクティブまたはロックされたままになります。

ここで、過去にユーザーが同意した条件のリストを追跡したいと思います。

Account.cs
public Guid Id {get; set;}
public IList<Terms> Terms {get; set;}
public string Name {get; set;}
public bool IsActive {get; set;}
public DateTime AgreedToTerms {get; set;}

Terms.cs
public Guid Id {get; set;}
public string Text {get; set;}
public DateTime Create {get; set;}

私はまだdbテーブルを持っていません。

私は正しい方向に進んでいますか?アドバイスが必要ですか、この関係をどのように処理するか考えましたか?

ありがとう

4

3 に答える 3

4

私が理解していると、各ユーザーが同意する条件が多いため、これは多対多の関係と呼ばれます(各ユーザーは多くの条件に同意する必要があり、1つの条件は多くのユーザーが同意できます)。このような場合、接続エンティティが必要です。現在の状況では、接続エンティティは合意の行為を表すため、次のようになります。

Account.cs
public Guid Id {get; set;}
public string Name {get; set;}
public bool IsActive {get; set;}
public IEnumerable<AgreedToTerms> AgreedTerms { get; set; }

Terms.cs
public Guid Id {get; set;}
public string Text {get; set;}
public DateTime Created {get; set;}
public IEnumerable<AgreedToTerms> AgreedUsers { get; set; }

AgreedToTerms.cs
public Account User { get; set; }
public Terms Terms { get; set; }
public DateTime DateOfAgreement {get; set;}
于 2013-02-12T21:16:42.960 に答える
1

私はいくつかのわずかな変更を加えます:

アカウントクラスに以下を追加します。

public Dictionary<Guid, bool> AcceptedTOS {get; set;}

はTermsクラスGuidIdフィールドであり、boolはそれらが受け入れられたかどうかです。アカウントをロックするために、それらのいずれかがfalseであるかどうかを簡単に確認できます。

if (AcceptedTOS.Any((x)=>x.Value == false))

現在、このソリューションは、すべてをc#に保持する場合にのみ機能します。エントリをデータベースに保存する場合は、szelpeの回答を使用することをお勧めします。

使用せずIList、使用してくださいList。誰かが私を間違っていると証明できない限り、クラスではなくインターフェースを使用しても意味がありません。

DateTimeOffsetではなく使用することをお勧めしますDateTime。これにより、タイムゾーン(およびこれが重要な部分)とともに、日付に関する精度が向上します。

TOSを文字列として保存し、メモリ内で飛び回らせたくない場合があります。ニーズによっては、非常に大きくなる可能性があります。

于 2013-02-12T21:17:28.713 に答える
0

条件が受け入れられたかどうかを示すboolプロパティをTermsオブジェクトに追加するだけです。Accountクラスの同じリストにある用語を引き続き使用し、必要に応じてリストに受け入れられない用語を照会できます。リスト内のTermsオブジェクトへの変更にデータバインドする必要がある場合は、フロントエンドの記述内容(WinForms、WPFなど)によっては、もう少し複雑になる可能性があります。

于 2013-02-12T21:14:06.190 に答える