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.
#programowanie
@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?
@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();<br />
const entity = (await personRepository.loadEntity(PersonEntity, uuid)) as PersonEntity;<br />
entity.name ="imię";<br />
await personRepository.saveEntity(entity);<br />
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.
@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ć
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.
Zaloguj się aby komentować