Ir ao conteúdo
  • Cadastre-se

MVC - Melhores Práticas


Posts recomendados

Olá pessoal, gostaria de tirar uma dúvida sobre MVC.

Digamos que eu tenha a classe Veiculo e a classe Fabricante. cada veículo possui um fabricante como atributo, dentre outros atributos.

Tenho as views para manter (cadastrar, editar e excluir) e buscar veículo e também fabricante.

Cada classe modelo tem seu controller (decidi criar 1 controle por modelo, ao invés de criar um controle por view).

Ou seja, a classe controlVeiculo será acessada por mais de uma view e terá os métodos

+listarVeiculos()

+salvarVeiculo(Veiculo v)

+editarVeiculo(Veiculo v)

+excluirVeiculo(Veiculo v)

(...)

que por sua vez acessa as classes DAO. Bem como a classe controlFabricante terá os mesmos métodos para fabricante.

 

A minha dúvida é a seguinte:

 

Quando eu chamar a view para cadastrar veículo, por exemplo, vou precisar listar os fabricantes já cadastrados no banco para a escolha do usuário.

Essa lista de fabricantes deve vir da onde?

- crio uma instância do controlFabricante dentro da viewVeiculo e chamo o método normalmente?

- deixo a minha viewVeiculo somente acessando o seu controle (controlVeiculo) e crio um método no controlVeículo para acessar a DAOFabricante?

- deixo a minha viewVeiculo somente acessando o seu controle (controlVeiculo) e, ao invés de criar um método no controlVeículo, eu crio uma instância do controlFabricante dentro de controlVeiculo e chamo o método entre os controllers (já que já tem um método definido no outro controle, evitando duplicar métodos)

- alguma outra sugestão?

 

Espero que tenha ficado claro minha dúvida.

 

Obrigado,

Link para o comentário
Compartilhar em outros sites

Citação

- Essa lista de fabricantes deve vir da onde?

Geralmente é um outro CRUD (Create, Retrieve, Update, Delete) específico para Fabricantes ... o que implica em nova tela de cadastro e busca ...

 

Citação

- crio uma instância do controlFabricante dentro da viewVeiculo e chamo o método normalmente?

Não. O melhor é você ter um controller para cada view e ele só atender chamados dessa view. Não é necessariamente uma regra, mas é uma boa pratica.

 

Citação

- crio uma instância do controlFabricante dentro da viewVeiculo e chamo o método normalmente?

Sim. Caso seja necessário replicar um código, a gente passa pra uma outra camada, a camada de serviço (services) ... uma boa prática é sempre deixar o service trabalhar com o DAO, e não o Controller ... facilita na manutenção ...
 

Citação

- deixo a minha viewVeiculo somente acessando o seu controle (controlVeiculo) e, ao invés de criar um método no controlVeículo, eu crio uma instância do controlFabricante dentro de controlVeiculo e chamo o método entre os controllers (já que já tem um método definido no outro controle, evitando duplicar métodos)

Isso também pode ser feito, sem problemas ... 

 

Citação

- alguma outra sugestão?

Como eu geralmente explico para meus estagiários ... o pessoal fala modelo MVC .. e eu prefiro colocar na ordem e como eu prefiro trabalhar ... View -> Controller -> Service -> Model  ... View apenas apresentação ... Controller responsável apenas por capitar os dados e formatá-los para apresentação ... Service responsável pela regra de negocio da view ... Model é a camada de persistencia dos dados processados (ou não) pelo service ...

 

Essa forma fica mais simples de entender, quando de repente for necessário consumir um webservice, por exemplo. A camada de serviço fica responsável pela comunicação ... 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!