背景:我有一個Person域對象。它是一個聚合根。我已經在下面列出了一部分課程。域驅動設計 - 如何處理聚合根部分的更新
我正在公開執行對象行爲的方法。例如,要添加一個BankAccount,我有AddBankAccount()方法。我沒有包括班級的所有方法,但足以說任何公共財產必須使用方法進行更新。
我將創建一個IPerson存儲庫來處理CRUD操作。
public interface IPersonRepository
{
void Save(Person p);
//...other methods
}
問題:我怎麼知道哪些字段需要更新的時候,我們要更新現有的人的資料庫?例如,如果我向現有人員添加銀行帳戶,那麼在調用repository.Save()時如何將此信息傳遞到存儲庫?
在存儲庫中,很容易確定何時創建新人員,但是當現有人員存在並且您更新該人員的字段時,我不確定如何與存儲庫通信。
我不想污染我的Person對象,關於更新哪些字段的信息。
我可以有像.UpdateEmail(),AddBankAccount()這樣的存儲庫上的單獨方法,但感覺像是矯枉過正。我想在存儲庫上使用一個簡單的.Save()方法,並以某種方式確定需要更新的內容。
其他人怎麼處理這種情況?
我已經搜索了網絡和計算器,但還沒有找到任何東西。我不能正確搜索,因爲在DDD範例中,這似乎很簡單。我也可以這樣過我的DDD的理解:-)
public class Person : DomainObject
{
public Person(int Id, string FirstName, string LastName,
string Name, string Email)
{
this.Id = Id;
this.CreditCards = new List<CreditCard>();
this.BankAccounts = new List<BankAccount>();
this.PhoneNumbers = new List<PhoneNumber>();
this.Sponsorships = new List<Sponsorship>();
}
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string Name{ get; private set; }
public string Email { get; private set; }
public string LoginName { get; private set; }
public ICollection<CreditCard> CreditCards { get; private set; }
public ICollection<BankAccount> BankAccounts { get; private set; }
public ICollection<PhoneNumber> PhoneNumbers { get; private set; }
public void AddBankAccount(BankAccount accountToAdd, IBankAccountValidator bankAccountValidator)
{
bankAccountValidator.Validate(accountToAdd);
this.BankAccounts.Add(accountToAdd);
}
public void AddCreditCard(CreditCard creditCardToAdd, ICreditCardValidator ccValidator)
{
ccValidator.Validate(creditCardToAdd);
this.CreditCards.Add(creditCardToAdd);
}
public void UpdateEmail(string NewEmail)
{
this.Email = NewEmail;
}
嗨,我看到沒有人真正回答你的問題。那麼,至少我不認爲說「使用ORM」是一個解決方案。你最終做了什麼? –