/horse-store

Caso de estudos - loja API Horse

Primary LanguagePascal

Horse Store

horse-store é um projeto com objetivo de praticar desenvolvimento multi-camadas de aplicação. Foi criado utilizando a IDE Delphi Community Edition 11 Alexandria e tem como principais dependências bibliotecas gratuitas.

Sobre o projeto

Grupo de Projetos

  • loja.exe: Cliente VCL (Visual Components Library ou Biblioteca de Componentes Visuais);
  • loja_server_console.exe: Versão console API, portável para Linux
  • loja_server_vcl.exe: Versão com interface gráfica da API, exclusivo para Windows;
  • loja_server_test.exe: Projeto de testes

Padrões de Projeto (Design Patterns)


Servidor

  • Abstract Factory: “Fábrica” que retorna objetos que obedecem um (ou mais) “contrato(s)” (interface);
  • SRP - Single Responsiblity Principle: Única responsabilidade;
    • Ex: Model contém regra de negócio, DAO acesso aos dados, Entity interface com os dados, DTO trafegar dados;
  • OCP - Open-Closed Principle: Objetos ou entidades devem estar abertos para extensão, mas fechados para modificação, ou seja, quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e não alterar o código fonte original.
    • Ex: DAO Oficial e DAO In-Memory, implementam mesmas interfaces, um tem objetivo de acesso a banco de dados e o outro salva dados em memória;
  • DIP — Dependency Inversion Principle: Inversão de dependência, como cada classe tem seu objetivo bem definido, uma não “invade” a outra. Logo, uma classe não precisa saber como conectar ao repositório, basta acionar a classe que implementa tal interface;
  • (Desejado) LSP— Liskov Substitution Principle: Implementação de injeção de dependência nos Model’s para definição dos DAOs.

Fonte: https://medium.com/desenvolvendo-com-paixao/o-que-é-solid-o-guia-completo-para-você-entender-os-5-princípios-da-poo-2b937b3fc530

Cliente

  • MVC: Padrão Model + View + Controller:
    • Model: classe para interfacear dados enviados ou recebidos da API
    • View: basicamente são as telas gráficas do cliente;
    • Controller: classes responsáveis por obter os dados, no caso, oriundos da API;

Estrutura pastas Servidor

Estrutura de pastas parte 1

Estrutura de pastas parte 2

  • ./
    • src
      • controllers
        • Loja.Controller.X.pas
      • model
        • bo:
          • Loja.Model.Bo.Interfaces.pas
          • Loja.Model.Bo.Factory.pas
          • Loja.Model.Bo.X.pas
        • dao:
          • in-memory
            • Loja.Model.Dao.X.Factory.InMemory.pas
          • oficial
            • Loja.Model.Dao.X.Factory.pas
          • Loja.Model.Dao.Interfaces.pas
          • Loja.Model.Dao.Factory.pa
          • Loja.Model.Dao.X.Interfaces.pas
        • dto:
          • Loja.Model.Dto.Req.X.pas
          • Loja.Model.Dto.Resp.X.pas
        • entity
          • Loja.Model.Entity.X.pas
        • Loja.Model.Interfaces.pas
        • Loja.Model.Factory.pas
        • Loja.Model.X.pas
      • App.pas
  • boss.json

Principais dependências

  • Boss

https://github.com/HashLoad/boss

  • Horse

https://github.com/HashLoad/horse

  • GBSwagger

https://github.com/gabrielbaltazar/gbswagger

https://github.com/IagooCesaar/gbswagger

  • Horse Json Interceptor

https://github.com/IagooCesaar/Horse-JsonInterceptor

  • RestRequest4D

https://github.com/viniciussanchez/RESTRequest4Delphi

  • Dataset Serialize

https://github.com/viniciussanchez/dataset-serialize

  • Delphi Code Coverage

https://github.com/DelphiCodeCoverage/DelphiCodeCoverage

  • Pascal Database Engine

https://github.com/IagooCesaar/pascal-database-engine

https://github.com/antoniojmsjr/MultithreadingFireDAC

Banco de Dados

Firebird 3.0

Firebird: The true open source database for Windows, Linux, Mac OS X and more

> isql -user sysdba employee

SQL> create user SYSDBA password 'SomethingCryptic';
SQL> commit;
SQL> quit;

IBExpert

IBExpert Download Center

IBExpert

💡 Script modelo para criação da base de dados: https://github.com/IagooCesaar/horse-store/tree/main/server/database

Apresentando e Executando os projetos 🚀

Vídeo apresentação projeto

Iniciando o projeto

Primeiro passo será instalar versão 11 da IDE Delphi, podendo ser até mesmo a versão Community Edition.

Será necessário obter o Boss, que é um gerenciador de dependência para o Delphi, similar ao NPM e YARN para Node.js. Verifique pela versão compatível com seu dispositivo dentre as opções em Releases.

Para rodar o projeto de testes será necessário a instalação do DelphiCodeCoverage. Neste projeto foi utilizada a versão 1.0.15, que pode ser obtida aqui.

Após realizar download do Boss e do DelphiCodeCoverage, recomendo colocar ambos os executáveis em uma mesma pasta em seu computador, e adicionar o caminho para acesso a esta pasta na variável PATH do seu Windows (nível de usuário ou a nível do computador). Com isto, você conseguirá utilizar estes executáveis facilmente no Windows Terminal (ou outros consoles do Windows).

Após fazer download do projeto, abra o Windows Terminal e navegue até a pasta onde se encontra o projeto.

Windows Terminal

  • Baixando dependências para o projeto CLIENTE: Navegue até a pasta do projeto cliente (ex: cd .\cliente\vcl) e rode o comando boss install. Aguarde o final do procedimento e então retorne para a pasta anterior (ex: cd ..\..).

  • Baixando dependências para o projeto SERVER: Navegue até a pasta do projeto server (ex: cd .\server) e rode o comando boss install. Aguarde o final do procedimento.

IMPORTANTE:
Este projeto foi construído utilizando versão do GBSwagger que ainda não foi disponibilizada oficialmente. Ou seja, embora no arquivo boss.json esteja indicando a versão 3.0.7 do GBSwagger, este projeto exige versão superior.
Deste modo, até que a nova versão desta dependência sejam publicadas, é recomendado que seja realizado o download manual da lib e então atualizada a dependência em \server\modules\gbswagger. Assim que a nova versão for disponibilizada, este projeto será atualizado.

Para executar a avaliação de cobertura de código, execute o arquivo code_coverage.bat que se encontra na pasta .\server\. Os resultados serão salvos em .\server\Win64\Debug\. Recomenda-se, para esta avaliação, abrir o arquivo .\server\Win64\Debug\CodeCoverage_summary.html

Relatório de cobertura de código

💡 Execute o script de criação do banco de dados antes de rodar o script de verificação de cobertura de código.

💡 Utilize o projeto loja_server_vcl para configurar o acesso ao banco de dados

💡 No vídeo há mais detalhes sobre a execução deste projeto