Ostatnio opisywałem mniej więcej ideę projektu i tego co chcę uzyskać:
https://peakd.com/project/@dotevo/projekt-programistyczny-genarbaro
Dzisiaj opiszę to co zrobiłem, robię i będę robić w najbliższych dniach.
Postępy
Jak zwykle czasu było mniej niż się spodziewałem, dlatego też projekt pewnie nieco się opóźni, ale i tak jestem zadowolony z tego co udało mi się już zrobić. Projekt to na razie zaledwie trochę ponad 800 linii kodu, ale były momenty, że było tego sporo więcej. Jak zwykle, dobry refaktoring to taki, który sprawia, że kodu jest mniej i jest czystszy.
Repozytorium
Po pierwsze udało stworzyłem repozytorium, w którym trzymam postępy prac. Stanowczo muszę jeszcze popracować nad opisem samego projektu, ale koncepcja zmieniała się kilka razy.
https://gitlab.com/genarbaro/genarbaro
Gitisto
Stworzyłem sobie część, która jest bardzo kluczowa dla całego projektu, a z czasem wydzielę ją jako osobny moduł. gitisto
to moduł, który pozwala na tworzenie bazy danych z systemu kontroli wersji Git. Każdy kto mnie chociaż trochę zna wie, że nazwa nie jest przypadkowa. Zawsze miałem problem z wymyślaniem nazw dla projektów, aby sobie to ułatwić wszystkie moje projekty mają nazwy w Esperanto (tak samo jak Genarbaro) i dzięki temu mogę zaoszczędzić setki godzin :D
Większość mojej pracy to był właśnie rozwój tego moduły. Założenie jest takie, aby aplikacja, która będzie chciała go używać nie musiała wgłębiać się w to jak działa Git i jak przechowywać tam dane, ładować historyczne wersje czy rozwiązywać konflikty. Dane trzymane są w plikach yaml, a to jak dany plik będzie wyglądać zależy od definicji Entity
w aplikacji np.:
@Entity("person", 1)
export class PersonEntity extends BaseEntity<PersonEntity> {
@IsString()
@IsOptional()
@Property()
name!: string;
public print() {
console.log(`Id: ${this.id} `);
console.log(` Name: ${this.name} `);
}
}
a aplikacja używa tego Entity w podobny sposób jak się używa ORMów:
const entity = await repository.createEntity(PersonEntity);
// Save empty
await repository.saveEntity(entity);
const entity = await repository.loadEntity(PersonEntity, opts.uuid);
entity.set(opts.param, opts.value);
await repository.saveEntity(entity);
Jak więc widać ten moduł będzie miał sporą odpowiedzialność i na szczęście powoli wszystkie najważniejsze metody posiadają implementacje. Napisałem też trochę testów, jako, że bardzo lubię pracować w TDD.
Kolejne kroki
Powoli zmierzam do tego abym mógł stworzyć swoje drzewo genealogiczne w moim własnym programie. Dzięki temu będę mógł łatwo znaleźć braki. Kolejnym więc krokiem będzie rozwój aplikacji CLI, która pozwoli takie drzewo tworzyć. Zacznę prawdopodobnie od testów całego commandera, a następnie będę implementował wszystkie brakujące metody.
Podsumowując projekt pisze mi się całkiem dobrze i mimo, że nie rozwija się jakoś bardzo szybko to ma stabilne tempo :-) co kilka dni staram się dodać do niego chociaż parę rzeczy.
Congratulations @dotevo! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :
Your next target is to reach 9000 upvotes.
You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Check out the last post from @hivebuzz: