Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika dotevo w Programowanie

Kosmonauta

w Programowanie

6piorunów

Kiedyś wymyśliłem sobie dość fajny projekt. Wydawał się bardzo prosty. Ogólnie chciałem napisać apkę w TS, która na początku będzie CLI, a w późniejszym czasie ewoluuje do TUI, a może nawet GUI.

Zadanie dość proste - tworzenie drzewa genealogicznego. Ale nie chciałem używać, żadnej istniejącej bazy danych. Docelowo miał być to projekt, który będzie offline, a z drugiej strony pozwoli na kolab. Zacząłem więc tworzyć własną bazę danych, która jest tak naprawdę plikami yaml, a wszystkim zarządza GIT. Każde entity ma swój katalog, a każdy plik jest osobnym rekordem, a że jest to GIT + YAML to wszystko w przyszłości miało się opierać na pull requestach. Dzięki temu w kilka osób można by tworzyć drzewko, bez myheritage czy innych.

Niby jakoś koncept zaczyna działać. Mogę dodać sobie nowe osoby do drzewa,, ale ostatnio ostro się zamotałem architektonicznie i od kilku dni nie jestem przekonany jak to ładnie ogarnąć. Jeszcze daleko do końca bo nie mam np. generowania indeksów aby szybko przeszukiwać rekordy i przeglądanie różnych rewizji danego rekordu nawet nie zostało rozpoczęte.

Po co to Wam piszę? Nie wiem. Patrzę na kod od kilku dni i widzę rzeczy do poprawienia... Zwyczajnie chyba za mało czasu poświęciłem na dobre rozrysowanie architektury na początku i teraz będę za to pokutował. Tak to jest gdy w pracy wszystko trzeba dokumentować i człowiek dla relaksu spróbuje innego podejścia w prostym projekcie domowym.

Komentarze (4)

Specjalista0piorunów

@dotevo a dlaczego kilka osob nie mialoby tworzyc razem drzewka na jednej wspolnej bazie danych? Bardzo utrudniles podejscie a to sie mija z celem. Normalny user nie bedzie walczyl z gitem zeby sobie drzewko zaktualizować :grinning:

Kosmonauta0piorunów

to się dzieje pod spodem. Użytkownik musi wiedzieć, że musi zmiany wysłać do "chmury" i pobrać.
Git to najlepszy sposób przechowywania danych. Łatwo zmiany wycofać, można posiadać kilka repo, łatwo pracować offline.

Mocarz2piorunów

@dotevo Czyli jeżeli w typowej "typowej" apce jest formularz do wpisania nazwiska i przycisk save wywołujący crudy pod spodem, u Ciebie jest:
-tworzenie ręcznie yamla zamiast formularzy
-tworzenie pull requesta w githubie zamiast przycisku "save"
-trzymanie yamli w repozytorium gita zamiast w bazie danych?

Kosmonauta1piorunów

@rafal155 Stworzyłem swoją libkę, która ma tym zarządzać trochę na kształt ORM więc to nie jest tak do końca. Z punktu widzenia osoby, która robi apkę używając tej libki wygląda to mniej-więcej tak:

const personRepository = project.getRepository();
const entity = (await personRepository.loadEntity(PersonEntity, uuid)) as PersonEntity;
entity.name ="imię";
await personRepository.saveEntity(entity);
gdzie PersonEntity to moja klasa z wszystkimi polami jak w standardowym ORM.

I pod spodem to zadziała tak, że załaduje YAML. Stworzy obiekt mojej klasy. Ja go zmodyfikuję i w momencie gdy zrobię saveEntity to trafi to do systemu plików. Potem trzeba jeszcze oczywiście swoje zmiany wybrać aby stworzyć commit i ew. wysłać. Ale w sumie nic nie szkodzi na przeszkodzie aby zawsze pracować tylko na lokalnym repozytorium i nie robić "git push/fetch".

A jeśli mówisz o użytkowniku aplikacji to w sumie to działa jakby była baza danych - użytkownik nie musi wiedzieć, że to pliki YAML. Tak jak mówiłem, na razie mam tylko CLI więc to wygląda na zasadzie:
`nazwa_applikacji person add` i uzupełniasz dane. Użytkownik nie ma pojęcia o YAML, ale YAML ma tę zaletę, że gdy aplikacja będzie gotowa i namówię innych członków rodziny do korzystania z niej to taki "pull request" nawet przeglądany z poziomu strony będzie czytelny. Będę widział nowe rekordy lub zmiany.