Cześć, zastanawiam się nad takim zadaniem.
Jest aplikacja, która pozwala na trzymanie danych lokalnie (Sqlite), ale też w chmurze (MSSQL).
Zaszła potrzeba, żeby zająć się teraz chmurą.
I teraz tak. Mam ileś tam klas modeli biznesowych, które mają między sobą różne zależności, np. jedna klasa ma w sobie listę innych klas:
W uproszczeniu to wygląda tak:
public class ParentModel: DbItem
{
public IList<ChildModel> SubItems {get; set;}
}
public class ChildModel: DbItem
{
public IList<AnotherChildModel> SubItems {get; set;}
}
public class AnotherChildModel: DbItem
{
public AnotherClass ConnectedItem {get; set;}
public IList<DetailItem> SubItems {get; set;}
}
I teraz jak najlepiej ogarnąć wysyłanie danych na serwer?
Użytkownik nie zmieni całego dokumentu, tylko poszczególne itemy. Dlatego też muszę wysłać na serwer tylko te zmienione itemy.
Zrobiłem sobie klasy DTO - odpowiedniki dla każdego elementu modelu tyle, że bez list, np:
public class AnotherChildDto
{
public Guid ConnectedItemId { get; set; }
}
public class DetailItemDto
{
public Guid ParentId {get; set;}
}
I teraz pytanie, czy to faktycznie dobre rozwiązanie, żeby robić jsona z takiej struktury DTOsów i wysyłać to do RestApi? Po stronie serwera odtwarzać z tego modele i pakować je do bazy danych? Czy może jest jakieś inne/lepsze rozwiązanie na coś takiego?
Głównym moim tutaj czerwonym światłem jest potrzeba sprawdzania typu każdego elementu.
Mam takie Dto, które będę pchał:
public class DocumentSaveDto
{
public List<ParentModelDto> ParentModels {get; set;}
public List<ChildModelDto> ChildModels {get; set;}
//itd.
}
I teraz muszę zrobić coś takiego:
DocumentSaveDto dto = new DocumentSaveDto();
foreach(var item in document.ModifiedItems)
{
//pseudokod:
switch(item.GetType())
{
case ParentModel:
dto.ParentModels.Add(new ParentModelDto(item));
break;
case ChildModel:
dto.ChildModels.Add(new ChildModelDto(item));
break;
//itd
}
}