2013-02-12 87 views
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;} 

我還沒有任何數據庫表。

我在正確的軌道上嗎?我需要建議或想法你將如何處理這種關係?

感謝

+0

你們每個協議只有兩方嗎?或者有更多的可能嗎? – 2013-02-12 21:12:18

回答

4

如果我明白,每個用戶都有更多條款可以達成一致,所以這被稱爲多對多關係(每個用戶必須同意很多條款,並且一個條款可以被許多用戶同意)。在這些情況下,需要一個連接實體。在當前的情況下連接實體代表協議的行爲,所以它看起來像這樣:

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;} 
0

我想補充一個布爾值屬性的對象條款,表明如果該條款已被接受與否。您仍然可以使用Account類中相同列表中的條款,並在需要時查詢列表中未接受的條款。如果需要更改列表中的Terms對象的數據綁定,可能會涉及更多一點,具體取決於您寫入的前端(WinForms,WPF等)的內容。

1

我會做一些細微的修改:

以下內容添加到您的賬戶類:

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

Guid是您的Terms類中的Id字段,bool是他們是否接受。你可以做一個簡單的檢查,如果他們中的任何一個是錯誤的鎖定帳戶。

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

現在,這種解決方案只適用於如果你想保持在C#中的一切。如果您將條目存儲在數據庫中,我建議您使用szelpe的答案。

請勿使用IList,只需使用List。除非有人能證明我錯了,否則我沒有看到使用界面而不是使用類的任何一點。

我建議你使用DateTimeOffset而不是DateTime。這使得日期的精確度更高,並且(這是重要部分)時區。

您可能不想將TOS作爲字符串存儲並在內存中飛行。根據您的需求,它可能會變得非常大。

相關問題