Jak rozumiem, to aplikacja "wie", co w profilu zostało zmienione, tak? A więc niech serwis wystawia endpointy pozwalające na aktualizację poszczególnych części profilu. To, czy pod spodem będzie EF czy nie, to i tak nie ma znaczenia, bo z change trackingu i tak nie skorzystasz.
I do każdego takiego "pstryczka" wystawiać osobną metodę w serwisie? IMO słabe
Ja bym to widział tak, że w momencie, gdy użytkownik zatwierdza formularz, to do serwisu leci informacja tylko o zmienionych polach.
Postaram się to opisać na przykładzie:
Mam stronę z ustawieniami profilu użytkownika. Może on zmienić:
- Nazwę
- Opis
- Datę urodzin
Po zatwierdzeniu formularza do serwisu leci json z danymi, które użytkownik zmienił na froncie. Np. jeśli zmienił nazwę i zatwierdził formularz, to do serwisu poleci json:
{
"name": "nowa-nazwa"
}
jeśli zmienił opis i datę urodzin, to do serwisu poleci:
{
"desc": "nowy-opis",
"birthday": "1990-09-08T19:01:55.714942+03:00"
}
Po zatwierdzeniu formularza, do serwisu trafia obiekt UserSettingsChangeDTO
public class UserSettingsChangeDTO
{
public string Name {get; set;}
public string Description {get; set;}
public DateTime? Birthday {get; set;}
}
I w zależności od tego, które pola mają ustawioną wartość, to wykonuję odpowiednie aktualizacje w bazie danych.
Co jeszcze moim zdaniem możnaby dodać, to przesyłać do serwisu informacje o aktualnych (sprzed zmiany) ustawieniach. Dzięki temu, w sytuacji, gdy 2 osoby próbowałyby na raz zmienić jakieś ustawienia, to serwis uniemożliwiłby to w razie "konfliktu". Chodzi o sytuację:
Ustawienia początkowe:
number: 1
- Użytkownik
A
przechodzi do ustawień i widzi aktualną wartość number: 1
- Użytkownik
B
przechodzi do ustawień i widzi aktualną wartość number: 1
- Użytkownik
A
zmienia number
na 2
- Użytkownik
B
zmienia number
na 3
- Użytkownik
A
zatwierdza formularz i wysyła do serwisu poprzednią wczytaną wartość number: 1
, oraz nową: 2
- Serwis pozwala na zmianę wartości number na:
2
- Użytkownik
B
zatwierdza formularz i wysyła do serwisu poprzednią wczytaną wartość number: 1
, oraz nową: 3
- Serwis nie pozwala na zmianę wartości
number
na: 3
, ponieważ użytkownik przesłał złą poprzednią wartość (ktoś zdążył ją zmienić po tym, jak ją odczytał)
Takie coś miałoby sens, gdyby wielu użytkowników miało dostęp do jakiegoś panelu z ustawieniami i nie chcielibyśmy, by ktoś nadpisał czyjeś zmiany.
Chyba też wiem, gdzie leży główny problem.. W normalnych systemach aktualizacje są małymi modułami - aktualizuj post, aktualizuj profil, aktualizuj hasło itd. To wszystko da się wyciągnąć do osobnych metod serwisu. W moim przypadku to musi być 1 metoda, która obsługuje aktualizacje w wielu miejsach, coś w stylu: najpierw zmieniamy treści posta, potem hasło, potem zdjęcia, a na końcu wciskamy przycisk i te wszystkie zmiany muszą być wprowadzone 1 żądaniem - coś jak z gitem - najpierw wprowadzamy zmiany w wielu miejsach, a potem 1 przyciskiem je zatwierdzamy.