[英]Proper Repository Design, Attaching one Object to Another
在我試圖保持良好的存儲庫/ IoC設計時,我試圖找出當前問題的最佳方法。
有兩個對象, Member
和Character
。
基本上,一個會員可以有很多角色。 很簡單。
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
負責填充Member
的Characters
。 有幾個原因:
IMemberRepository
是Member
類型的Repository
,因此它知道Member
的組成。 這就是它知道Character
類型的原因。 ICharacterRepository
的責任。 Character
類型可用於將來組合其他類型。 每當您添加新類型時,這將影響Character
的Repository
。 IMemberRepository
將使用ICharacterRepository
填充Character
中的對象Member
。 對我來說最自然的方法是將該邏輯放在Member類中,因為Member對象負責跟蹤它自己的Character。
你覺得怎么樣?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.