Pergunta

Eu tenho usado Kohana por alguns meses agora, e ainda sou relativamente novo para o estilo MVC de organizar seu / apresentação / db-camada de código. Infelizmente, enquanto há muita documentação sobre como criar um controlador, estabelecer uma visão, e interagir com um db através de um modelo, eu não encontrei muitos recursos que lidam com limpo, e desenvolvimento sugeriu padrões.

Deixe-me dar um exemplo rápido:

Meu projeto mais recente tem um controlador, porque eu não tenho certeza se eu deveria estar fazendo muito mais do que isso ... ou quando eu deveria fazer um novo. Como exatamente faço para determinar quando um novo controlador é necessária, juntamente com quando um novo modelo é necessário?

Foi útil?

Solução

Eu sugiro que você tenha um olhar para o recurso arquitetura orientada , em primeiro lugar. Isso não vai dar-lhe todas as orientações diretas de como organizar seu código. No entanto, quando se pensa em termos de recursos a vida é mais fácil quando se trata de decidir se deve ou não criar um novo controlador. Uma vez que você conseguir identificar um recurso no seu sistema, geralmente é uma coisa boa para criar um modelo mais um controlador para ele -. Embora, esta é apenas uma regra de ouro

Alguns pontos adicionais:

  • olhar para os recursos e criar um modelo e um controlador para cada um deles (regra de ouro)
  • Não tenha medo de criar modelos para recursos que não persistem
  • pensar sobre controladores como "encanamento" ou "fiação" do usuário para o domínio do negócio - o seu papel é às solicitações dos usuários tratar e encaminhar a resposta de volta para eles - mantê-los o mais fino possível

Outras dicas

O polegar regra é a seguinte: quando eu identificar um novo tipo de "item" que meu aplicativo. necessidades de gerir, peço a minha auto estas perguntas:

(1) itens devem de este tipo ser persistente?

(2) Existem vai ser muitos exemplos deste produto?

Se a resposta a ambas as perguntas é positiva concluo que o referido item deve ser um modelo (ou modelo de elemento ou de domínio de classe, dependendo da terminologia do seu framework MVC). Quando eu definir um novo elemento do modelo Eu também definir um controlador para ele que irá apoiar as quatro operações básicas:. Criar, recuperar, atualizar, delete (que é provável que o seu quadro pode gerar um controlador padrão para você)

Você pode querer obter uma cópia de Martin Fowler 'Padrões de arquitetura de aplicações corporativas. Os seção fala Apresentação Web extensivamente sobre como estruturar seu código quando se utiliza um quadro Front Controller-driven, como qualquer um da atual onda de frameworks MVC.

Eu gosto de pequenos controladores com uma função ou conjunto de funções claramente definidas. Isso geralmente significa um controlador por página (ou conjunto de páginas semelhantes). Em meu site Kohana, CSSMySite Tenho cerca, blog, contato, css e controladores de correios.

Toda a cerca de controlador não está definido o modelo. Os interage controlador blog com o modelo de blog para listar vários lugares do banco de dados. Os interage pós controlador com o modelo de blog para exibir um post de banco de dados.

Toda vez que eu tenho dados que é persistente (posts) ou usados ??várias vezes (lista de estados para uma caixa suspensa), ele vai para o modelo. Os modelos podem ser acessados ??por diferentes controladores para que ele não tem que ser um mapeamento um-para-um de modelo para o controlador.

Talvez uma boa maneira de aprender boa programação MVC é para passar algum tempo em Ruby-on-Rails. Comecei a usar trilhos um tempo atrás, e como um resultado indireto eu acredito que tenho um entendimento muito bom da MVC agora. I ver trilhos como o epítome da MVC. Pelo menos, poderia ser uma maneira divertida aprender MVC ... o que vocês todos pensam?

Aqui está um exemplo do que eu tenho feito em meu aplicativo Kohana.

Eu precisava de uma seção de 'últimas notícias', então eu configurar um controlador, modelo e Vista intitulado 'news'.

O meu controlador de notícias tinham métodos index(), feed() e media_releases().

Meu modelo consistiu em consultas db que recebem meus dados de notícias a partir de um banco de dados MySQL.

E minha opinião é apenas um monte de HTML com algum <?php echo $title; ?> e similares.

Existe uma razão pela qual você não pode definir um sistema de genéricos que funciona levaraging globalmente metadados de banco de dados? Parece-me geralmente escrever qualquer código em tudo para acesso e visualização de dados simples é uma redundância desnecessária.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top