[Projekt programistyczny] Genarbaro #2

Ostatnio opisywałem mniej więcej ideę projektu i tego co chcę uzyskać:
@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.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now