Rejestracja użytkownika - problem z modelem i ID.

0

Cześć.
Mam zaimplementowaną rejestracje w której dostaje obiekt RegisterAccountDTO który waliduje i jak wszystko gra to konwertuję go do klasy Account (taki mój model domenowy) którą po wykonaniu pewnych operacji chcę zapisać do bazy. Jako że na początku nie mam ID to moja klasa w uproszczeniu wygląda tak że wszystkie pola oprócz ID są immutable (a do ID mam setter). Po zapisaniu takiego obiektu chcę go jeszcze zwrócić (wydaje mi się że jest to po prostu poprawne) wraz z ID dla dalszych operacji więc przez konstruktor wypełniam wszystkie parametry tym co mi baza zwróciła a ID przez setter. Metoda do zapisu zwraca taki obiekt który potem jest zamieniany na DTO i ten obiekt wraca jako body response.

Mam jednak wrażenie że to wszystko się jakoś kupy nie trzyma stąd też moje wątpliwości i pytania.

  1. Klasa Account jest immutable natomiast ID przez to że nie zawsze występuje jest var'em co jest moim zdaniem bezsensu. Można to jakoś lepiej zaimplementować?
  2. Czy metoda w której jest wykonany zapis użytkownika do bazy powinna zwrócić Account czy jakiś AccountDTO? Pomyślałem sobie że móglbym dodać coś w stylu RegisteredAccountDTO i wszystkie pola zrobić immutable natomiast wydaje mi sie że to też może być średnie rozwiązanie bo jeśli po zarejestrowaniu użytkownika muszę wykonać dodatkowe operacje (np. utworzyć token do weryfikacji wysyłany mailem) to jest to dalsza część logiki i moim zdaniem powinienem działać tu na tym obiekcie domenowym a dopiero po wykonaniu wszystkich operacji zwrócić jakieś DTO.
0

Hej

Jeśli metoda, która dodaje account do "bazy" zwróci Ci Account to ten account może mieć już id - wypełniony przez tą metodę:

np:

 Account ac = new Account(userName,login....);
Account added = AccountRepository.addAccount(ac);
added.getId() // tu będziesz miał id
0

Może coś takiego?

  1. klasa Account jest immutable wliczając id
  2. Konwertujesz DTO na obiekt domenowy setując mu id = null
  3. Zapisujesz, jooq/baza danych setuje id z sequence rekordowi
  4. Z repo zwracasz tylko id
  5. Z serwisu zwracasz nowy obiekt z nie-nullowym id na podstawie starego i otrzymanego id z repo
Account accountWithNullId = accountConverter.convert(registeredAccountDTO);
long id = jooqRepository.save(accountWithNullId);
return new Account(id, accountWithNullId);
0
Tyvrel napisał(a):

Może coś takiego?

Account accountWithNullId = accountConverter.convert(registeredAccountDTO);
long id = jooqRepository.save(accountWithNullId);
return new Account(id, accountWithNullId);

Trochę nie do końca się zrozumieliśmy. Takie rozwiązanie oczywiście będzie działać natomiast mi nie chodzi o konkretną implementację (ponieważ takową posiadam) tylko bardziej o kwestie projektowe jak to zamodelować żeby to było zrobione dobrze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1