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.
- 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
- 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.
- 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;
- ./
- 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
- in-memory
- 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
- bo:
- App.pas
- controllers
- src
- boss.json
- 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
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;
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.
-
Baixando dependências para o projeto CLIENTE: Navegue até a pasta do projeto cliente (ex:
cd .\cliente\vcl
) e rode o comandoboss 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 comandoboss 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 arquivoboss.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
💡 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