Wpis z mikrobloga

jak zazwyczaj tworzycie interfejsy dla encji? Ja mam aktualnie 2 ale wydaje mi się, że to niewystarczająco:
https://www.pastery.net/vnjptk/
Interfejsy są współdzielone między frontendem i backendem, ale niektóre pola nie mogą być zmienione przez frontend, tylko backend - jak do tego dobrze podejść? Dać jeszcze jeden interfejs dla frontendu z polami, które frontend może zobaczyć/zmienić, a pozostałe ukryć?

#programowanie #typescript
  • 5
@neufrin: wydaje się, że mając i tak jeden codebase lepiej współdzielić interfejsy gdzie to możliwe. Dlatego mam interfejs ProjectCreate gdzie dajesz minimum danych dla nowej encji, a dla istniejącej encji osobny interfejs ze wszystkimi pozostałymi polami. W ten sposób gdy dodajesz coś do encji zmieniasz to tylko w jednym miejscu.
@zielnik01: > W ten sposób gdy dodajesz coś do encji zmieniasz to tylko w jednym miejscu.

Kombinujesz dobrze, ale to jedno miejsce powinno być w backendzie. Ogólnie cała logika biznesowa powinna w nim być (już pomijając podziały wewnątrz). Front powinien być tylko interfejsem między użytkownikiem, a backendem. Nie mieć dostępu do niczego pod spodem, a tylko do jakiegoś wystawionego API.

Robisz 2 osobne metody w backendzie, jedna do tworzenia nowych encji,
Robisz 2 osobne metody w backendzie, jedna do tworzenia nowych encji, a drugą do edycji już istniejących.


@neufrin: dokładnie tak robię. Aby posługiwać się typami z TSa, używam innego interfejsu do tworzenia
POST /api/projects - wymaga typ ProjectCreate, zwraca typ Project

innego do read:
GET /api/projects/:id zwraca typ Project

a innego do update:
PUT /api/projects/:id wymaga typ Project (pełna encja), zwraca Project

jeszcze innego do patch:
PATCH /api/projects/:id wymaga typ Partial
@zielnik01: Ogólnie nie powinno się wypuszczać encji przez API na światło dzienne, a zmappowane obiekty DTO i na nich operuje frontend, a backend to mapuje na encje i z powrotem. Dzięki temu po stronie backendu wybierasz pola z dto którymi chcesz aktualizować/tworzyć jakąś encję. Również dtosy dla dodawania/edycji/odczytu mogą być różne od siebie, a że często będą identyczne to nie przeszkadza.