trabalho de refatoração

10
Trabalho de Refatoração Aluno: Diogo F. Miranda Aluno: Joel Antônio 6° período Trabalho de Refatoração - Sistema de controle de Biblioteca Iniciamos realizando a técnica de refatoração, trocar condicional por polimorfismo Aqui temos o código com a instrução switch private int MenuCadastroUsuarios(Scanner input) { int opcao = -1; switch (opcao) { case OPCAO_CADASTRO_USUARIOS_CADASTRAR: cadastrarUsuario(input); opcao = -1; break; case OPCAO_CADASTRO_USUARIOS_EXCLUIR: excluirUsuario(input); opcao = -1; break; case OPCAO_CADASTRO_USUARIOS_CONSULTAR: consultarUsuarios(input); opcao = -1; break; case OPCAO_VOLTAR: case OPCAO_QUIT: break;

Upload: diogo-francisco-miranda

Post on 18-Aug-2015

14 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Trabalho de refatoração

Trabalho de Refatoração

Aluno: Diogo F. Miranda

Aluno: Joel Antônio

6° período

Trabalho de Refatoração - Sistema de controle de Biblioteca

Iniciamos realizando a técnica de refatoração, trocar condicional por polimorfismo

Aqui temos o código com a instrução switch

private int MenuCadastroUsuarios(Scanner input) {

int opcao = -1;

switch (opcao) {

case OPCAO_CADASTRO_USUARIOS_CADASTRAR:

cadastrarUsuario(input);

opcao = -1;

break;

case OPCAO_CADASTRO_USUARIOS_EXCLUIR:

excluirUsuario(input);

opcao = -1;

break;

case OPCAO_CADASTRO_USUARIOS_CONSULTAR:

consultarUsuarios(input);

opcao = -1;

break;

case OPCAO_VOLTAR:

case OPCAO_QUIT:

break;

Page 2: Trabalho de refatoração

default:

opcao = -1;

break;

}

} while (opcao == -1);

return opcao;

}

Após ser refatorado o código ficou da seguinte forma:

public abstract class MenuCadastroUsuarios {

abstract public int getMenuCadastroUsuarios();

}

@Override

public class MenuUsuarioCadastrar extends MenuCadastroUsuarios {

int excluirUsuario(input) {

opcao = -1;

}

@Override

public class MenuUsuarioExcluir extends MenuCadastroUsuarios {

int caFdastrarUsuario(input) {

opcao = -1;

}

Page 3: Trabalho de refatoração

@Override

public class MenuUsuarioConsultar extends MenuCadastroUsuarios {

int consultaUsuario(input) {

opcao = -1;

}

Page 4: Trabalho de refatoração

Utilizamos também a técnica de refatorar , retirando nomes obscuros de variáveis.

public boolean inserir(Livro livro, int quantidade) {

EntityManager em = factory.createEntityManager();EntityTransaction t = em.getTransaction();boolean result = false;Estoque = null;

}

Alteramos o nome da variável para resultado_quantidade_livro.

Ficando o código da seguinte forma.

public boolean inserir(Livro livro, int quantidade) {

EntityManager em = factory.createEntityManager();EntityTransaction t = em.getTransaction();boolean resultado_quantidade_livro = false;Estoque estoque = null;

}

Exemplo variável sendo usada

public int buscarQuantidade(Livro livro) {

EntityManager em = factory.createEntityManager();EntityTransaction t = em.getTransaction();int resultado_quantidade_livro = 0; }

}

Page 5: Trabalho de refatoração

Agora utilizamos a técnica de refatoraração EXTRAIR MÉTODO.

Neste exemplo o desenvolvedor utilizou um comentário.

/** * Cadastra um Usuario * @param input Objeto da classe {@link Scanner} */

private void cadUsu(Scanner input) {

Usuario usuario = new Usuario();

System.out.print("Digite o nome do novo usuario: ");usuario.setNome(getStringFromInput(input));

if (bibliotecaNegocio.cadUsu(usuario)) {

System.out.println("Id: " + usuario.getIdUsuario()+ " Nome: \"" + usuario.getNome() + "\"");System.out.println("Usuario cadastrado “);

} else {

System.out.println("Erro ao cadastrar .");

}

Então alteramos o nome do método para um nome mais util. Pois comentários são válidos apenas para explicar códigos e facilitar manutenções futuras

private void cadastrar_Usuario(Scanner input) {

Usuario usuario = new Usuario();

System.out.print("Digite o nome do novo usuario: ");usuario.setNome(getStringFromInput(input));

if (bibliotecaNegocio.cadUsuario(usuario)) {

System.out.println("Id: " + usuario.getIdUsuario()+ " Nome: \"" + usuario.getNome() + "\"");

System.out.println("Usuario cadastrado “);

} else {

System.out.println("Erro ao cadastrar .");

}

Page 6: Trabalho de refatoração

Classes só valem a pena serem deixadas no código se realmente estiverem sendo usadas, caso contrário é melhor que sejam removidas.

Desta forma, apenas retiramos a classe FidelidadeUsuario que é um tipo de usuário, só que com benefícios a mais. Utilizamos a técnica de refatoração de Internalizar Classe.

Page 7: Trabalho de refatoração

Também realizamos a refatoração de MOVER MÉTODO.

O método de devolver livros estava na classe de cliente, ou seja estava na classe errada.

private void devolverLivro(Scanner input) {

int idUsuario = -1;String isbnLivro = null;

System.out.print("Digite o ISBN do livro: "); isbnLivro = getStringFromInput(input);

do {System.out.print("Digite o ID do usuario: ");idUsuario = getIntFromInput(input);

} while (idUsuario == -1);

if (promptConfirma(input)) {

if (bibliotecaNegocio.devolverLivro(isbnLivro, idUsuario))

System.out.println("Devolucao realizada com sucesso!");

} else {

System.out.println("Erro ao devolver livro.");}

}

Page 8: Trabalho de refatoração

Portanto Removemos o método da classe errada, pois usa informação de livro e não cliente. Passando a ficar na classe LIVRO

OBS:

Depois precisamos ajustar as referências do método antigo para o método novo.

Page 9: Trabalho de refatoração

Realizamos um exemplo da refatoração Consolidar Fragmentos Condicionais Duplicados. Aqui temos dois códigos comuns que geram a mesma mensagem

("Nao ha' nenhum usuario cadastrado.");

private void consultarUsuarios(Scanner input) {

List<Usuario> usuarios = bibliotecaNegocio.listarUsuarios();

if ( usuarios.size() == 0){System.out.println("Nao ha' nenhum usuario cadastrado.");}

if (usuarios == null) {

System.out.println("Nao ha' nenhum usuario cadastrado.");

} else {

System.out.println("Lista de usuarios cadastrados:");

for (Usuario usuario : usuarios) { System.out.println("Id: " + usuario.getIdUsuario()

" Nome: \"" + usuario.getNome() + "\"");}}

Ficando com o seguinte código

private void consultarUsuarios(Scanner input) {

List<Usuario> usuarios = bibliotecaNegocio.listarUsuarios();

if (usuarios == null || usuarios.size() == 0) {

System.out.println("Nao ha' nenhum usuario cadastrado.");

} else {

System.out.println("Lista de usuarios cadastrados:");

for (Usuario usuario : usuarios) {

System.out.println("Id: " + usuario.getIdUsuario()+ " Nome: \"" + usuario.getNome() + "\"");

}

Page 10: Trabalho de refatoração

}

Após a refatoração, ficou da seguinte forma