Lottare per gestire gli aggregati e aggregare le radici quando si tratta di persistere. Ad esempio, attualmente ho un repository per ogni aggregato / tabella, ma questo sta causando alcuni problemi nella mia classe di servizio.
Current JournalService
public class JournalService
{
public JournalService(IUnitOfWork uow, IJournalRepository journalRepo)
{
this.uow = uow;
this.journalRepo = journalRepo;
}
public void AddEntry(string journalName, Entry entry)
{
journalEntryRepo.AddEntry(journalName, entry);
// there is no need for me to even have a journal class or any other domain class since repositories handle it all
uow.Save();
}
private readonly IUnitOfWork uow;
private readonly IJournalRepository journalRepo;
}
Nell'esempio sopra (quello che sto attualmente usando), sembra che non abbia senso avere anche classi di dominio come Journal. Potrei semplicemente gestire tutto accedendo ai repository. Questo mi sembra molto strano .. Quasi sento che non esiste un dominio.
Dopo ulteriori ricerche sembra che un repository dovrebbe gestire una radice aggregata; e restituire l'intera radice su cui quindi operare. Il problema che sto riscontrando con questa soluzione proposta è, devo solo chiamare l'aggiornamento sulla radice aggregata anche se ho aggiunto degli oggetti (ad esempio a un elenco)? Vedi sotto:
Proposta di nuovo JournalService
public class JournalService
{
public JournalService(IUnitOfWork uow, IJournalRepository journalRepo)
{
this.uow = uow;
this.journalRepo = journalRepo;
}
public void AddEntry(string journalName, Entry entry)
{
Journal journal = journalRepo.FindById(journalName);
journal.AddEntry(entry);
journalRepo.Update(journal); ///// am I handling this correctly here?
uow.Save();
}
private readonly IUnitOfWork uow;
private readonly IJournalRepository journalRepo;
}
// simple CRUD for repo
public interface IJournalRepository
{
Journal Create();
Journal FindById(string name);
void Update(Journal journal);
void Remove(Journal journal);
}
Con la nuova soluzione, sto gestendo questo correttamente? Quindi suppongo che IJournalRepository debba gestire l'identificazione delle voci aggiunte e quindi aggiungerle alla tabella corretta? Anche se sembra molto lavoro extra ...