Aula 6 - FénixFramework e DML

Nesta aula vamos fazer um pequeno exercício para experimentar a utilização da FénixFramework e explorar a definição de um domínio de objetos persistentes usando a linguagem específica de domínio DML. 
Parte prévia (anterior à aula de laboratório): instalar base de dados MySQL diretamente ou através do Docker
  • Instalar o servidor MySQL na sua máquina.
  • Instalar o Docker
    • Colocar local.dev.yml no diretório raiz do projeto
    • Lançar docker $docker-compose -f local.dev.yml up
Primeira parte: instalar o projeto e testar
  • Obtenha o projeto aula-dml de https://github.com/tecnico-softeng/aula-dml.git
  • Abra o projeto no IDE como um projeto maven
  • Analise o ficheiro pom.xml
  • Analise o ficheiro src/main/resources/fenix-framework.properties.example e crie um ficheiro src/main/resources/fenix-framework.properties em que coloca a sua password de root do MySQL
  • Crie uma base de dados com o nome que encontrou no ficheiro de propriedades da FénixFramework
  • Execute mvn clean compile
  • No IDE adicione target/generated-sources/dml-maven-plugin ao build path do projeto
  • Execute mvn clean test
Segunda parte: incrementar o conjunto de funcionalidades
  • Analise a classe BankPersistenceTest
  • Analise o ficheiro src/main/dml/bank.dml
  • Crie uma nova classe persistente Account associada à classe Bank de forma que sempre que uma conta é criada liga-se ao objeto banco que recebe como argumento. Adicione à classe BankPersistenceTest a verificação que a nova conta fica persistentemente ligada ao banco.
  • Defina os método deposit e withdraw e adicione à classe BankPersistenceTest a verificação da persistência das ações destes métodos.
  • Defina o método totalBalance na classe Bank, que testa a soma dos saldos de todas as contas do banco. Adicione à classe BankPersistenceTest a verificação da persistência destas ações.
  • Defina a classe SavingsAccount como subclasse de Account redefinindo os métodos deposit e withdraw de modo a que apenas é possível depositar múltiplos de 100 e levantar a totalidade do saldo. Adicione à classe BankPersistenceTest as verificações necessárias.
  • Defina a classe  WithdrawalAccount como subclasse de Account e coloque a classe Account como abstrata. Adicione à classe BankPersistenceTest as verificações necessárias.