Zostaw sobie miejsce na to żeby nie podejmować żadnych decyzji na początku, odrocz je na późniejszy etap projektu.
@Riddle Jak w takim razie do tego podejść? Faktycznie, zazwyczaj podchodzę do tego tak (realizując funkcjonalność na backendzie), że piszę logikę biznesową wraz z testami w oddzielnych klasach/modułach, dopiero potem endpointy które wypluwają wynik i implementację obsługi zewnętrzych usług. Na frontendzie nie bardzo wiem jak się do tego zabrać, może to wynika po prostu z braku doświadczenia.
No po pierwsze, zaakceptuj fakt że kod się zmienia. To jest całkowicie normalne napisać na początku kod, który wiesz że i tak będziesz musiał usunąć. Celem tutaj jest mieć początkową wersję aplikacji której możesz używać. Np. piszesz bardzo prymitywną formę logowania, pokazujesz klientowi, on Ci pisze kilka feature'ów które chce, mijają tygodnie, lub miesiące, i potem przerabiasz logowanie na coś bardziej wyrafinowanego. To jest perfekcyjnie okej, nikt nie pisze dobrych rozwiązań za pierwszym razem. Najpierw należy napisać coś szybko, prosto, tanio; i potem ewentualnie poprawić jeśli jest taka potrzeba. Prosto szybko i tanio, ale dobrze - czyli z testami, z refaktorem, z odpowiednimi nazwami. Nie rób syfu.
Po drugie, nie podejmuj ważnych decyzji na początku projektu - zostaw sobie otwarte drzwi, żeby podjąć decyzje później. Jeśli możesz odroczyć wybór framework'a albo technologii na późniejszy moment - zrób to.
Z tego co widzę już teraz to różne frameworki JS używają różnych języków. Angular używa TypeScripta, w React widzę pliki z rozszerzeniem jsx (jakieś rozszerzenie JS'a?), są też frameworki które używają czystego JS'a. Takiego kodu TS nie da się użyć bezpośrednio w przeglądarce - trzeba go najpierw przekształcić na czysty JS jakimś narzędziem budującym projekt (webpack?). Tu też widzę że różne frameworki preferują różny stack. Mógłbym podjąć decyzję o pisaniu logiki biznesowej w TS, ale to utrudnia potem przejście na frameworki które na tym nie bazują - musiałbym potem porzucić wypracowany wcześniej sposób budowania projektu i przekształcić pliki na odpowiedni format.
Ja zazwyczaj zaczynam od najprostszej wersji jaką mogę, najczęściej jest to vanilla-js, ta old-school z document.createElement()
. Napisanie tego jest bardzo szybkie, bo począkowe wersje nie mają prawie żadnych funkcjonalności. Nie koniecznie musi być vanilla-js - chodzi po prostu o najszybsze i najtańsze stworzenie początkowej wersji, ale tak żeby być otwartym na późniejszą zmianę tej decyzji. Dlatego nie zaczynam od żadnych scaffoldów - bo jak wygeneruję projekt np. react native; to zmienić to w późniejszym etapie np. na angular jest niemalże niemożliwe.
Potem zbieram feedback od klienta, i dowiaduje się czego potrzebuje - jak bardzo interkatywna ma być strona, czy są powody przypuszczać że będzie chciał PWA czy nie; etc. Piszę widok w taki sposób, żeby odseparować logikę widoku od prezentacji widoku - tak żebym później mógł zmienić vanilla-js na react, SSR, czy jakąś inną technologię, ale tak żeby nie musieć tego pisać od nowa. Bardzo pomaga w tym polimorfizm i SRP.
Wybieranie stacku technologicznego, jak jeszcze dobrze nie wiesz jak będzie wyglądała aplikacja, jest średnie. To trochę tak jakbyś pakował ubrania na podróż, ale jeszcze nie wiesz gdzie.
- Cześć forumowicze, czy na moją wycieczkę powinienem spakować parasol słoneczy czy raczej kurtkę zimową?
- A gdzie jedziesz?
- Nie wiem, ale chciałbym zdecydować już teraz co spakować.
To tak samo wygląda jak pytasz o dobór stacku technologicznego na początku projektu. Nie wiesz jak będzie wyglądał, nie wiesz dokładnie z jakimi problemami się spotkasz, nie wiesz na czym zależy klientowi - ale chcesz podjąć ważną decyzję którą jeszcze będzie trudno zmienić w przyszłości. No tak się nie robi. Najpierw ustal jak będzie wyglądała aplikacja i co będzie miała robić - ale jak to zrobić na początku? No musisz napisać minimum aplikacji żeby klient mógł po niej poklikać, ale trzeba to dostarczyć szybko, i tanio; ale tak żeby nie zamknąć się na zmianę decyzji (tutaj wkracza polimorfizm i Dependency Inversion), oraz tak żeby sobie nie stawiać kłód pod nogi w dalszym developmencie (tutaj wchodzą testy, refaktor, dobre nazwy i SRP). I oczywiście tego się nie robi raz, tylko ciągle. Wprowadzasz małą prostą zmianę, pokazujesz klientowi, zbierasz feedback, robisz kolejną małą zmianę, etc.
Ważna dewiza: na początku każdego projektu, wiesz o nim najmniej. Z czasem i z pracą, wiesz o projekcie coraz więcej. Więc decyzje o stacku i frameworku lepiej podjąć później, wtedy kiedy będziesz miał więcej wiedzy.