Struktura projektu w node js

0

Witam,

Chce napisać sobie backend w node js. Baza danych Mongodb. Co sądzicie o takim połączeniu:

  • Postawiony serwer
  • Kod napisany w type script
  • Repozytorium generyczne
  • Połaczenie z bazą za pomocą Mongoose

Kwestia security- nie myślałem nad tym i chyba to pominę. Powód- serwer i baza danych lokalne. Aplikacja powstanie głównie w celach naukowych. Jestem jeszcze studentem.
Kolejnym etapem byłby front, np w Angularze. Co sądzicie o takim połaczeniu? Najbardziej zastanawia mnie czy jest sens i czy to dobra praktyka pisać kod w typescript?

0

Tak pewnie, ale to myśle zrobić jako kolejny etap jak bedzie działała baza i cała reszta. Co sądzicie o takim sposobie napisania tej apki?

0

Ja myślę że bym to zrobił tak.

Node.js LTS połączył z express, na to rzucić npm z dodatkami, mongoose, podzielić logikę routera i mongo, security chyba trudne nie jest w kwestii prostego backendu, typescript bym sobie darował, od tego masz es6 + babel

Front to polecam Vuejs bo szybko będziesz pisać a debug prosty i szybki, w dodatku dokumentacja jest nieźle zrobiona i tego nikt nie podważy.

0

A repozytorium generyczne? też sobie darować? Do czego służy to Express? I jak rzucić npm z dodatkami?

0

Najbardziej zastanawia mnie czy jest sens i czy to dobra praktyka pisać kod w typescript?

Ani dobra, ani zła. Kwestia gustu oraz innych uwarunkowań.

Jednak TypeScript ma tę wadę, że trzeba transpilować kod. W przeglądarce i tak zwykle się to robi (więc jeśli nie TypeScript to np. Webpack + Babel). Jednak w Node domyślnie nie ma potrzeby transpilować kodu i wrzucając bądź to TypeScripta, bądź to Flow, bądź to JSX, bądź po prostu zaawansowane ficzery z JS, które jeszcze nie są obsługiwane przez Node - sam sobie kładziesz kłody pod nogi i dokładasz dodatkowy krok. I wszystko będziesz musiał transpilować.

Oczywiście, możesz uznać, że zalety TypeScriptu są tego warte (ale to znowu kwestia gustu i rozeznania, czy faktycznie tego potrzebujesz. Moje podejście jest takie, że w Node staram się unikać transpilacji, bo to jest wygodniejsze, choćby przy testowaniu, debugowaniu itp. Nie trzeba czekać "aż się skompiluje", tylko masz kod i go uruchamiasz.

Co sądzicie o takim połaczeniu?

To spróbuj zakodować. Make it work, make it right, make it fast. (czyli najpierw kodujesz coś, żeby w ogóle zobaczyć np. jak się te rzeczy ze sobą łączą i skupiasz się na tym, "żeby działało". Potem myślisz o tym, jak to przerobić albo przepisać od nowa, żeby było elegancko/dobrze napisane. A potem myślisz o takich rzeczach jak np. optymalizacja).

A poza tym... im wcześniej odejdziesz od koncepcji projektu jako "zlepku różnych technologii" tym lepiej. Są w projektowaniu rzeczy ważniejsze niż to, czy będzie to napisane w TypeScript, albo czy użyjesz Moongose.

0

Jaka jest dobra praktyka w łaczenia nodejs z baza danych? Pamietam, ze w c# robił się to warstwowo. Tutaj nie mam pojecia. Mozecie cos polecic lub pokazać jak to powinno wyglądać. Myślałem jad jakims repo generycznym ale nikt na ten temat się nie wypowiada jak na razie

0

Niezależnie jaki język wybierzesz, architektura powinna być taka sama, zatem tak, w nodeJS również powinieneś zadbać o warstwę persystencji (zapisu danych).
Generyczne repozytorium - hmm, tutaj opinie są sprzeczne. Spotkałem się z takimi które zakładają, że jest to w porządku, ponieważ oszczędza ilość napisanego kodu, oraz takie które twierdzą, że repozytorium powinno być dostosowane do encji. Osobiście zgadzam się z ostatnią opinią wymienioną w tym artykule:
http://www.ben-morris.com/why-the-generic-repository-is-just-a-lazy-anti-pattern/
Generyczne repo są ok, ale tylko jako wewnętrzna (chroniona) referencja w konkretnym repozytorium. Gdzie widzę problem? Już tłumaczę.
Kiedy budujesz sam aplikację, to masz pełną kontrolę gdzie i co możesz umieścić. Twoje kontrolery mogą posiadać repozytoria w których można odpalić kwerendę SQL, ale to Ty kontrolujesz kiedy z tej metody skorzystasz.
Problem natomiast pojawia się w momencie pracy zespołowej. Kolega odpowiedzialny za projektowanie endpoint-ów w API może nie mieć takiej świadomości kodu jak Ty. Dlatego też powinieneś oferować mu konkretne repozytoria z których on może korzystać. Dzięki temu nie musisz się martwić, że wywoła metodę której nie powinien nawet znać. Dzięki temu masz świadomość, że nie zrobi np dropa przez kwerendę SQL, ponieważ nie dajesz mu takiej możliwości.

0

node to shit
Teraz jest appCIS
[CIACH!] nodeJS

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