Executando verificação de segurança...
3

Bacana a iniciativa, vou acompanhando daqui!
Gostaria de deixar alguns pontos pra discussão e um link de material sobre boas práticas em C++: https://github.com/cpp-best-practices/cppbestpractices
Esse link tem basicamente o fonte de um livro feito pelo Jason Turner, bem conhecido dentro da comunidade de C++. Tente ler o que puder nesse link/livro e quase qualquer coisa que eu escreva abaixo vai ser redundante. :)

  • Evite usar using namespace xxx: seu código vai crescer. Namespaces em C++ existem, entre outras coisas, pra que se evite colisão entre nomes. Sim, as declarações ficam maiores, mas é importante manter claresa sobre o que está onde e de onde vem algo.
  • Evite arrays puros: array em C++ não é extensível. Em geral você vai usar quando sabe exatamente quanto elementos uma sequencial vai ter (nem mais, nem menos). Em geral, você vai acabar usando muito mais tipos como std::vector ou std::list.
    • Se for possível adotar C++20, você pode optar por implementar funções que recebam um tipo std::range (https://www.modernescpp.com/index.php/c-20-the-ranges-library), que é basicamente uma view para diversos objetos que buscam abstrair sequencias de outros objetos. Com isso você pode chamar a mesma função se seu objeto inicial for um std:vector, srd::list ou std::array.
  • Prefira receber refêrencias para objetos do que cópias dos mesmos: esse tópico é um pouco extenso pra entrar no detalhe, Por exemplo, o método addTransaction poderia ter a assinatura: bool addTransaction(const Transaction& transaction);, pos desta maneira você passa apenas um endereço de memória para a função e não o objeto completo.
  • NUNCA use double para dados financeiros: prefira usar um int64_s e formatar de acordo na camada de exibição.

Boa sorte! :D

Carregando publicação patrocinada...
2

Caramba, muitíssimo obrigada pelas dicas. Já dei uma olhada por cima no repositório e achei super interessante. Com certeza vou absorver o máximo que puder de lá.

Sobre usar double para dados financeiros, sei que essa é uma péssima prática e gera diversas inconsistências nos cálculos. Por isso a ideia de criar um módulo money. Nesse módulo, todas as operações serão feitas com inteiros (guardados na propriedade amount) e apenas na hora de salvar na carteira ou na transação será convertido para double na função toUnit().

Pelo que conheço de padrões em cálculos financeiros, essa é a melhor prática, não?

1

Olha, que eu conheça fica tudo sempre como int64_t e na camada de apresentação você formata usando uma callback de formato: centavos -> divide por 100, se for bitcoin por exemplo divide por 10^8 e por aí vai.