
Padrão MVC2
O que é MVC?
MVC (Model-View-Controller) é um padrão de arquitetura de software que separa uma aplicação em três componentes principais:
- Model (Modelo): Representa a lógica de dados da aplicação. Ele gerencia o comportamento e os dados do aplicativo e responde a solicitações para alterar o estado (geralmente de um controlador).
- View (Visão): É responsável por apresentar os dados ao usuário e formatar sua representação. Ele só exibe informações recebidas do modelo e envia interações de usuário para o controlador.
- Controller (Controlador): Atua como um intermediário entre o modelo e a visão. Ele ouve as entradas de usuário e transforma essas entradas em comandos para o modelo ou visão.
Por que usar o MVC?
- Separação de Preocupações: Cada componente (Modelo, Visão e Controlador) tem uma responsabilidade bem definida, o que facilita a manutenção e evolução da aplicação.
- Reutilização e Flexibilidade de Código: Com a lógica de negócios separada da interface de usuário, os modelos podem ser reutilizados em diferentes partes da aplicação ou em outras aplicações.
- Facilita Testes e Depuração: Como a lógica de dados e a interface de usuário estão desacopladas, fica mais fácil realizar testes unitários e depurar o código.
- Melhoria na Organização do Projeto: Ajuda na organização do projeto, tornando-o mais compreensível e fácil de gerenciar.
- Suporte a Múltiplas Interfaces de Usuário: Diferentes visões podem ser criadas para apresentar os mesmos dados, permitindo, por exemplo, adaptar a interface para dispositivos móveis sem alterar a lógica do aplicativo.
Em resumo, o MVC ajuda a tornar o desenvolvimento de software mais estruturado, flexível e adaptável a mudanças.
Novo Projeto
1. Estrutura do Projeto
Diretórios Principais:
- /classes: Armazena classes de entidades como Veiculo e Proprietario.
- /controllers: Contém lógicas de controle.
- /models: Gerencia interações com o banco de dados.
- /views: Arquivos HTML/PHP para interface do usuário.
- /config: Armazena arquivos de configuração, como database.php.
Estrutura Exemplo:
/projeto_veiculos
/classes
- veiculo.php
- proprietario.php
/controllers
- veiculoController.php
- proprietarioController.php
/models
- veiculoModel.php
- proprietarioModel.php
/views
- veiculosViews.php
- editarVeiculos.php
- proprietariosViews.php
- editarProprietarios.php
/config
- database.php
index.php
2. Banco de Dados
Esquema do Banco:
- veiculos: id, marca, modelo, ano, proprietario_id
- proprietarios: id, nome, endereco
CREATE TABLE proprietarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100),
endereco VARCHAR(150)
);
CREATE TABLE veiculos (
id INT AUTO_INCREMENT PRIMARY KEY,
marca VARCHAR(50),
modelo VARCHAR(50),
ano INT,
proprietario_id INT,
FOREIGN KEY (proprietario_id) REFERENCES proprietarios(id)
);
3. Arquivos PHP
/classes/Veiculo.php
id;
}
public function getMarca() {
return $this->marca;
}
public function setMarca($marca) {
$this->marca = $marca;
}
public function getModelo() {
return $this->modelo;
}
public function setModelo($modelo) {
$this->modelo = $modelo;
}
public function getAno() {
return $this->ano;
}
public function setAno($ano) {
$this->ano = $ano;
}
public function getProprietarioId() {
return $this->proprietario_id;
}
public function setProprietarioId($proprietario_id) {
$this->proprietario_id = $proprietario_id;
}
}
?>
/classes/Proprietario.php
id;
}
public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}
public function getEndereco() {
return $this->endereco;
}
public function setEndereco($endereco) {
$this->endereco = $endereco;
}
}
?>
/controllers/veiculoController.php
model = new VeiculoModel();
}
public function create($marca, $modelo, $ano, $proprietario_id) {
return $this->model->create($marca, $modelo, $ano, $proprietario_id);
}
public function read($id) {
return $this->model->read($id);
}
public function update($id, $marca, $modelo, $ano) {
return $this->model->update($id, $marca, $modelo, $ano);
}
public function delete($id) {
return $this->model->delete($id);
}
public function getAll() {
return $this->model->getAll();
}
}
?>
/controllers/proprietarioController.php
model = new ProprietarioModel();
}
public function create($nome, $endereco) {
return $this->model->create($nome, $endereco);
}
public function read($id) {
return $this->model->read($id);
}
public function update($id, $nome, $endereco) {
return $this->model->update($id, $nome, $endereco);
}
public function delete($id) {
return $this->model->delete($id);
}
public function getAll() {
return $this->model->getAll();
}
}
?>
/models/VeiculoModel.php
pdo = Database::getConnection();
}
public function create($marca, $modelo, $ano, $proprietario_id) {
$sql = "INSERT INTO veiculos (marca, modelo, ano, proprietario_id) VALUES (:marca, :modelo, :ano, :proprietario_id)";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':marca', $marca);
$stmt->bindParam(':modelo', $modelo);
$stmt->bindParam(':ano', $ano);
$stmt->bindParam(':proprietario_id', $proprietario_id);
$stmt->execute();
return $this->pdo->lastInsertId();
}
public function read($id) {
$sql = "SELECT * FROM veiculos WHERE id = ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function update($id, $marca, $modelo, $ano) {
$sql = "UPDATE veiculos SET marca=?, modelo=?, ano=? WHERE id=?";
$stmt = $this->pdo->prepare($sql);
return $stmt->execute([$marca, $modelo, $ano, $id]);
}
public function delete($id) {
$sql = "DELETE FROM veiculos WHERE id=?";
$stmt = $this->pdo->prepare($sql);
return $stmt->execute([$id]);
}
public function getAll() {
$sql = "SELECT * FROM veiculos";
$stmt = $this->pdo->query($sql);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
?>
/models/ProprietarioModel.php
pdo = Database::getConnection();
}
public function create($nome, $endereco) {
$sql = "INSERT INTO proprietarios (nome, endereco) VALUES (:nome, :endereco)";
$stmt = $this->pdo->prepare($sql);
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':endereco', $endereco);
$stmt->execute();
return $this->pdo->lastInsertId();
}
public function read($id) {
$sql = "SELECT * FROM proprietarios WHERE id = ?";
$stmt = $this->pdo->prepare($sql);
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
public function update($id, $nome, $endereco) {
$sql = "UPDATE proprietarios SET nome=?, endereco=? WHERE id=?";
$stmt = $this->pdo->prepare($sql);
return $stmt->execute([$nome, $endereco, $id]);
}
public function delete($id) {
$sql = "DELETE FROM proprietarios WHERE id=?";
$stmt = $this->pdo->prepare($sql);
return $stmt->execute([$id]);
}
public function getAll() {
$sql = "SELECT * FROM proprietarios";
$stmt = $this->pdo->query($sql);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
?>
/views/veiculos.php
delete($_POST['id']);
} elseif (isset($_POST['create'])) {
$controller->create(
$_POST['marca'],
$_POST['modelo'],
$_POST['ano'],
$_POST['proprietario_id']
);
}
}
$veiculos = $controller->getAll();
?>
Veículos
Inicio
Veículos
ID
Marca
Modelo
Ano
Proprietário ID
Ações
= htmlspecialchars($veiculo['id']) ?>
= htmlspecialchars($veiculo['marca']) ?>
= htmlspecialchars($veiculo['modelo']) ?>
= htmlspecialchars($veiculo['ano']) ?>
= htmlspecialchars($veiculo['proprietario_id']) ?>
/views/editarVeiculos.php
update($_POST['id'], $_POST['marca'], $_POST['modelo'], $_POST['ano']);
header('Location: veiculos.php');
exit;
}
}
$veiculo = null;
if (isset($_GET['id'])) {
$veiculo = $controller->read($_GET['id']);
}
?>
Editar Veículo
Editar Veículo
Veículo não encontrado.
Voltar
/views/proprietarios.php
delete($_POST['id']);
} elseif (isset($_POST['create'])) {
$controller->create(
$_POST['nome'],
$_POST['endereco'],
);
}
}
$proprietarios = $controller->getAll();
?>
Proprietários
Inicio
Proprietários
ID
Nome
Endereço
Ações
= htmlspecialchars($proprietario['id']) ?>
= htmlspecialchars($proprietario['nome']) ?>
= htmlspecialchars($proprietario['endereco']) ?>
/views/editarProprietarios.php
update($_POST['id'], $_POST['nome'], $_POST['endereco']);
header('Location: proprietarios.php');
exit;
}
}
$proprietario = null;
if (isset($_GET['id'])) {
$proprietario = $controller->read($_GET['id']);
}
?>
Editar Proprietário
Editar Proprietário
Proprietário não encontrado.
Voltar
/config/database.php
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Conexão falhou: ' . $e->getMessage());
}
}
return self::$pdo;
}
}
?>
index.php
Gerenciador de Veículos
Bem-vindo ao Gerenciador de Veículos
Escolha uma opção abaixo:
Essa estrutura cria um esqueleto básico de um aplicativo PHP usando o padrão MVC, permitindo manipulações básicas de veículos e proprietários através de uma interface web simples. Certifique-se de substituir as chamadas de métodos e gerenciamento de sessão conforme necessário para suas necessidades específicas.
Implementação do MVC no Projeto
Estrutura e Motivo
Model (Modelo):
- Responsabilidade: Gerencia a lógica de dados e interações com o banco de dados.
- Implementação: Clases VeiculoModel e ProprietarioModel contêm métodos CRUD para acessar e manipular dados.
View (Visão):
- Responsabilidade: Apresenta dados ao usuário e lida com a interface.
- Implementação: Arquivos de visualização veiculos.php e proprietarios.php exibem listas, formulários e ações dos usuários.
Controller (Controlador):
- Responsabilidade: Media a interação entre Model e View, processa inputs e atualiza o modelo.
- Implementação: Controladores VeiculoController e ProprietarioController gerenciam lógica de controle.
Por que usar MVC?
- Separação de Preocupações: Cada camada tem uma responsabilidade clara, o que facilita manutenção e escalabilidade.
- Reutilização e Flexibilidade: Isola a lógica de dados, permitindo que diferentes visões possam ser aplicadas sem alterar os modelos.
- Facilitação de Testes: Permite testar componentes individualmente e melhora a depuração.
Fluxo de Trabalho MVC
1. Usuário Interage com a View:
- Arquivo: veiculos.php ou proprietarios.php
- Ação: O usuário pode adicionar, editar ou excluir registros.
2. A View Envia Solicitações ao Controller:
- Adicionar:
- Arquivo: veiculos.php ou proprietarios.php
- Processo: Formulário envia dados ao controller via POST.
- Editar/Excluir:
- Editar: Redireciona para editarVeiculo.php ou editarProprietario.php.
- Excluir: Envia solicitação de exclusão ao controller.
3. O Controller Processa a Solicitação:
- Adicionar/Editar:
- Arquivo: VeiculoController.php ou ProprietarioController.php
- Processo: Valida e processa os dados, atualizando o modelo.
- Excluir:
- Processo: Deleta o registro usando o modelo apropriado.
4. O Model Executa a Lógica de Dados:
- Arquivo: VeiculoModel.php ou ProprietarioModel.php
- Processo: Executa operações CRUD no banco de dados.
5. A View Atualiza para o Usuário:
- Adicionar:
- Arquivo: veiculos.php ou proprietarios.php
- Processo: Lista é atualizada com o novo registro.
- Editar:
- Arquivo: editarVeiculo.php ou editarProprietario.php
- Processo: Após a edição, redireciona de volta à página inicial.
- Excluir:
- Arquivo: veiculos.php ou proprietarios.php
- Processo: Remove o registro visualmente após a exclusão.