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.
#programowanie
rafal155

@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?

dotevo

@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.

ShutDown

@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ć

dotevo

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ć