簡體   English   中英

正確的存儲庫設計,將一個對象附加到另一個對象

[英]Proper Repository Design, Attaching one Object to Another

在我試圖保持良好的存儲庫/ IoC設計時,我試圖找出當前問題的最佳方法。

有兩個對象, MemberCharacter

基本上,一個會員可以有很多角色。 很簡單。

Member
{
 IList<Character> Characters { get; set; }
}

有一個IMemberRepository ......

interface IMemberRepository
{
 MemberCreateStatus CreateMember(string email, string password);
 bool ValidateMember(string email, string password);
 bool ChangePassword(string email, string password, string newPassword);
 void RecoverPassword(string email);
}

還有一個ICharacterRepository

interface ICharacterRepository
{
 Character CreateCharacter(string name);
}

那么,我的問題很簡單。 我想在哪里添加邏輯以向Member添加Character 我是否在IMemberRepository執行此IMemberRepository 這對我來說似乎很麻煩。 它似乎超出了IMemberRepository的任務范圍。 我是否將其添加到ICharacterRepository 這對我來說似乎有點奇怪,因為提供會員資格的知識似乎違反了讓他們分開。 在這里,最好的方法是什么?

如果它只是這一種方法,它不會太大 - 但是在這兩種類之間必然會發生很多其他事情。 什么是“標准”方法來處理這兩種物體相互關聯的情況? 我在ASP.NET MVC中對此進行編碼。

我認為你可能正在接近存儲庫的方式與預期不同,這可能是你的一些混亂的原因。

存儲庫用於為一組數據提供集合語義。 這意味着存儲庫獲取,添加和刪除內容。 他們沒有驗證。 他們不會改變有關個別物品的事情。 它們不是數據訪問對象(DAO),盡管似乎很多人最近將其命名為Repository,然后使其看起來像DAO。

您的會員包含一系列角色。 大! 想要為會員添加角色? 這樣 Member.AddCharacter(...)Member.Characters.Add(...) 我通常使用前者,但后者也可以工作(但需要自定義集合實現)。

我覺得IMemberRepository負責填充MemberCharacters 有幾個原因:

  • 由於IMemberRepositoryMember類型的Repository ,因此它知道Member的組成。 這就是它知道Character類型的原因。
  • 當然不是ICharacterRepository的責任。 Character類型可用於將來組合其他類型。 每當您添加新類型時,這將影響CharacterRepository
  • IMemberRepository將使用ICharacterRepository填充Character中的對象Member

對我來說最自然的方法是將該邏輯放在Member類中,因為Member對象負責跟蹤它自己的Character。

你覺得怎么樣?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM