Aprendendo do básico sobre a linguagem de programação JAVA.

Padrão de escrita MVC

Nenhum comentário
Bom dia, boa tarde, boa noite galera!
Hoje vou falar um pouquinho sobre MVC. É de comer?! Não, mas pode garantir o seu sustento xD
No ramo da programação temos muitas normalizações que são adotadas pra facilitar a vida do programador e a manutenção no seu código. Por exemplo, quando você entra numa empresa pra trabalhar com programação, você perceberá bem rápido que um determinado padrão de codificação é adotado para facilitar o entendimento do código pela equipe. Um desses padrões é o MVC (Model, View, Controller) e esse padrão é mais amplamente adotado por todos por causa da sua simplicidade e eficácia.


Os nossos pacotes poderiam ficar organizados como na imagem. Não se preocupem com o br.com no momento, porque é apenas uma nomenclatura para quem se acostuma a desenvolver para o ambiente web xD
Como os pacotes são bem definidos e tem função específica, fica fácil achar e corrigir problemas no nosso código. Mas vamos ao que interessa. Como funciona esse padrão?

Basicamente é como na imagem, onde o usuário enxerga a visão, através de um comando ele invoca um método do controlador, o controlador manipula o modelo alterando seus valores, o modelo é atualizado e "avisa" a visão que seus dados foram alterados e por fim a visão é renderizada novamente mostrando ao usuário os dados alterados.
Simples né? No começo NÃO mas depois que se pega a prática, você consegue fazer mais nada sem adotar o padrão MVC!! Mas como isso funciona em JAVA? Se você ainda não conseguiu enxergar, se liga só que aí vai um exemplo.
Não é atoa que o padrão se chama MVC porque primeiramente vamos escrever nossa classe model em seguida a view e por último, se comunicando com ambas as classes, escreveremos a classe controller. Então mãos a obra.
Queremos fazer um cadastro de automóveis. Hã?! Tá, não queremos, mas vai ser o exemplo. Então começaremos com o modelo do nosso sistema, que é o........ Automóvel! Isso mesmo, você tá começando a entender a translação da realidade em negócio no mundo Java.
package br.com.kodificando.model;

//Classe Automóvel
public class Automovel {

String marca; // A marca do nosso Automóvel
Double preco; // O preço do nosso Automóvel

// Nosso construtor...

public Automovel() {}

/* Métodos get/set */
public String getMarca() {
return marca;
}

public void setMarca(String marca) {
this.marca = marca;
}

public double getPreco() {
return preco;
}

public void setPreco(double preco) {
this.preco = preco;
}

}
Se você não sabe pra que servem os métodos get/set não se preocupe. São apenas para mudar os valores dos atributos da classe e para resgatar esses valores. Qualquer dúvida, comente no post e eu responderei com urgência.
Agora vamos fazer a classe de visão do nosso sistema, que basicamente será a classe..... Tela! É isso aê, se vamos enxergar o sistema, precisa ser por uma tela né... A classe Tela vai precisar pegar um novo valor de automóvel, uma nova marca, e listar os automóveis cadastrados.
package br.com.kodificando.view;

import java.util.List;
import java.util.Scanner;

import br.com.kodificando.model.Automovel;

public class Tela {

String novaMarca; // Marca que será cadastrada
Double novoPreco; // Preço que será cadastrado

Scanner leitor; // Leitor de dados

/**
* Exibe uma tela de cadastro para um novo automóvel.
* O novo automóvel possui uma marca e um preço
*/
public void exibaTelaDeCadastro() {
leitor = new Scanner(System.in);
System.out.print("Marca do automóvel: "); // Exibe texto para usuário
this.novaMarca = leitor.nextLine(); // Captura a marca digitada pelo usuário
System.out.print("Preço do automóvel: "); // Exibe texto para usuário
this.novoPreco = (Double) leitor.nextDouble(); // Captura o preço do usuário
}

/**
* Exibe a lista da automóveis para o usuário
* Recebe um parâmetro {@code automoveis} que é a lista a ser exibida
* @param automoveis Lista de automóveis a ser exibida
*/
public void exibaListaDeAutomoveis(List<automovel> automoveis) {
for (Automovel automovel : automoveis) {
System.out.println("Marca: " + automovel.getMarca());
System.out.println("Preço: " + automovel.getPreco() + "\n");
}
}

/* Métodos get/set */
public String getNovaMarca() {
return novaMarca;
}

public void setNovaMarca(String novaMarca) {
this.novaMarca = novaMarca;
}

public double getNovoPreco() {
return novoPreco;
}

public void setNovoPreco(double novoPreco) {
this.novoPreco = novoPreco;
}
}

Beleza, agora podemos concluir o projeto criando nosso controlador, cujo nome é..... Controlador! É, pro controlador não precisa muita firula não, fica mais compreensível se você coloca um nome simples para que saibam que é ali que a "mágica" acontece. O controlador precisa pedir um novo cadastro ao usuário e exibir a lista de carros. Então vamos lá.

package br.com.kodificando.controller;

import java.util.ArrayList;
import java.util.List;

import br.com.kodificando.model.Automovel;
import br.com.kodificando.view.Tela;

public class Controlador {

List<Automovel> automoveis; // Lista de automóveis
Tela tela; // Tela do usuário

public Controlador() {
automoveis = new ArrayList<>(); // Inicializando a lista
tela = new Tela(); // Inicializando a tela
}

/**
* Realiza um novo cadastro
* exibindo a tela de cadastro para o usuário
*/
public void facaNovoCadastro() {
tela.exibaTelaDeCadastro();

Automovel automovel = new Automovel();
automovel.setMarca(tela.getNovaMarca());
automovel.setPreco(tela.getNovoPreco());

automoveis.add(automovel);
}

/**
* Exibe a lista de carros cadastrados para o usuário
*/
public void exibaListaDeAutomoveis() {
tela.exibaListaDeAutomoveis(automoveis);
}
}
Está tudo pronto. Pra rodar falta apenas uma coisa! O método main. Mas onde ficaria esse método? Obviamente não seria nas nossas classes. Precisamos criar um pacote e uma classe apenas para o método main e separá-lo do restante do código.
package br.com.kodificando.main;

import br.com.kodificando.controller.Controlador;

public class Main {

public static void main(String[] args) {
// Criando um controlador
Controlador controlador = new Controlador();

// Vamos cadastrar e exibir cinco carros
for (int i = 0; i < 5; i++) {
controlador.facaNovoCadastro();
controlador.exibaListaDeAutomoveis();
}
}

}


Com o método main pronto, podemos rodar nosso código e se você tiver algum problema com a compilação ou qualquer dúvida vai poder postar aqui e eu responderei o quanto antes. No próximo post vamos falar de orientação a objetos e polimorfismo. Ao final, nosso projeto estará como na imagem.





Nenhum comentário :

Postar um comentário