Cześć, jakiś czas temu zasiadłem do nowej apki, z chęcią zrobienia kilku rzeczy inaczej. I teraz tak
- używam EfCore
- na widokach chcę używać tylko ViewModeli
To powoduje pewien zgrzyt. Mam jedno rozwiązanie, ale nie wydaje mi się do końca poprawne. A więc sytuacja wygląda tak:
- widok pobiera listę użytkowników z viewmodelu. Każdy użytkownik też jest ViewModelem (a właściwie takim bardziej DTOsem), coś w stylu:
public class UserViewModel
{
User model;
public UserViewModel(User model)
{
this.model = model;
}
public int Id { get { return model.Id; }}
public string Name
{
get { return model.Name; }
set
{
if(model.Name != value)
model.Name = value;
}
}
}
public class UserListViewModel: BaseViewModel
{
public ObservableCollection<UserViewModel> DataSet {get; set;}
public async Task InitializeViewModel()
{
ObservableCollection<User> models = await service.GetUsersAsObservable();
}
}
I teraz zaczyna się zabawa... Pobieram z serwisu kolekcję observable -> daje mi to EfCore, dzięki czemu dokładnie wie później, co pozmieniać podczas dbContext.Save
Ale skoro serwis daje mi kolekcję modeli, muszę je jakoś zmienić na ViewModele. A jeśli dodam/usunę jakiś rekord, muszę to od razu ogarnąć w modelu, np:
//collection change od DataSet:
//dodawanie:
models.Add(ConvertViewModelsToModels(addedViewModels));
//usuwanie
models.Remove(removedViewModel.GetModel());
Co oznacza, że muszę synchronizować ze sobą dwie listy. Czy takie podejście jest ok? Czy można to zrobić lepiej/inaczej?