Ostatnio trochę poczytałem (tutaj i gdzie indziej) nt. zasadności i technik stosowania Repo, modeli a encji i jestem trochę w kropce (czyt. mam sieczkę w mózgu) w kwestii przełożenia DB - apka.
Przypuśćmy, że piszemy program którego jednym z zadań jest automatyczne wysyłanie maili. Używamy EFCore.
Mój podstawowy model to byłby Klient. Klient ma m.in. nazwę, adresy email, stosowane przywitanie, treść i zakończenie maila.
Bazę chciałbym zrobić wg. podejścia Code First (możę tu jest błąd?).
No i teraz tak - jeszcze niedawno bym zrobił po prostu modele: Customer, Intro, Body, Ending, Emails w taki sposób (odpowiadający tabelom w bazie):
class Customer
{
public string Name { get; set; }
public virtual IntroDB Intro { get; set; }
public virtual BodyDB Body { get; set; }
public virtual EndingDB Ending { get; set; }
public virtual ICollection<Mailbox> Emails { get; set; }
}
class Mailbox
{
public string Address { get; set; }
public virtual CustomerDB Customer { get; set; }
}
class Intro
{
public int IntroId { get; set; }
public string Name { get; set; }
public int Content { get; set; }
}
Body, i Ending analogicznie
Ale mnie tak teraz te skrawki wiedzy trafiły (pewnie w złe miejsca) i może jednak np. tak:
public class Customer
{
public string Name { get; set; }
public ICollection<string> EmailAddresses { get; set; }
public string Greeting { get; set; }
public string Ending { get; set; }
public string Body { get; set; }
public ICollection<string> PhoneNumbers { get; set; }
}
a do zrobienia bazy osobny folder (DBModels?) w którym by były modele jak w pierwszej wersji - z tego by się robiła baza, a ja poprzez odpowiednie repozytorium (repozytoria?) bym sobie pobierał/ edytował/ dodawał tych klientów. Robię sobie jednak w tym momencie problem gdy będę chciał umożliwić CRUDowanie treści (będę chciał)- dużo się będzie musiało dziać w VModelach (imho).
Byłoby mi bardzo miło jakbyście mi podpowiedzieli jak do takich zagadnień najlepiej podchodzić i wypomnieli wszystkie głupoty jakie w tym poście umieściłem.
P.S. Miałem też przygodę z osobnym projektem do tworzenia DB. Ale odepchnął mnie fakt konieczności tworzenia contextu w jednym i drugim projekcie, a następnie uaktualnianie równolegle obydwóch.