Pergunta

Eu tenho um site protótipo escrito em PHP. Ultimamente tenho reescrito código para a lógica separada das operações de layout e banco de dados. Então agora eu tenho algo como projeto do código MVC.

Agora, o que me incomoda, é que no MVC eu vou ter muitos arquivos e cada um vai exibir algo quando combinado com outro (modelo + vista + controlador). Então eu descobri que seria útil para criar algo como os widgets de minhas partes MVC.

Por exemplo, quando eu tenho MVC de produtos ver do que eu iria criar um arquivo PHP que combinar arquivos de peças MVC em tal moda para produtos de vídeo baseados em valores GET eu passar a este novo arquivo PHP.

O que gostaria de acomplish desta forma é que qualquer widgets, subpartes website estará disponível para ver separadamente e usar separadamente de outras partes. Portanto, seria algo como os widgets ou como o projeto do navegador Firefox.

Assim, gostaria de ser capaz de testar todas as partes do website em separado, e não apenas combinar essas peças em design de página site real atual. Então teste de usuário seria mais fácil também, e os arquivos de apresentação seria muito curto e fácil de entender.

Gostaria de saber o que você pensa sobre isso. Eu não quero cair em nenhum buraco no design-coisas e eu acho que este é o momento em que será importante no futuro para manter a manutenção de código do Web site fácil.

Am I correto?

Foi útil?

Solução

MVC eu vou ter muitos arquivos e cada um vai exibir algo quando combinado com outro (modelo + vista + controlador)

isso soa como você não conseguiu o MVC-modelo certo. Somente Visualizações ter conteúdo ou 'display algo'.

Com base nisso, você pode criar ações que só criar um pequeno widget-como parte do conteúdo, que depois podem ser combinados em seu layout.

Eu gostaria de recomendar a leitura do Zend_Layout Quick Start .

Outras dicas

A resposta para seu problema é composição vista .

Eu sugiro que você dividir a tela inteira em pedaços menores: barra superior, barra de navegação de segundo nível, lista de produtos, área de visualização, e assim por diante. Estes poderiam ser fornecidos por vistas separadas, vista ajudantes ou métodos adicionais em seu controlador. Em seguida, uma ação do controlador faria compor peças em uma única tela, usando o layout HTML simplista.

Por exemplo. para bar superior que é estático isso poderia ser especializado vista. Para lista de produtos que é dinâmico poderia ser controlador getProductsList($categoryId) método que fornece visão complexa. Previsão do Produto podem ser entregues pela visão ajudante. Veja o seguinte exemplo:

// inside class ProductsController
public function index($categoryId, $productId = null) {

    // specialised view
    $topBar = new TopBarView();
    $topBar->selected = 'products';

    // helper method
    $list = $this->getProductsList($categoryId);

    // helper object
    $previewHelper = new PreviewHelper($productId);
    $preview = $previewHelper->getView();

    // view composition
    $view = new View('path/to/template.tpl');
    $view->add($topBar);
    $view->add($list);
    $view->add($preview);
    return $view;

}

Este é apenas um exemplo para ilustrar como funciona a composição.

benefício oculto de ter método para a entrega de widget (ou seja, lista de produtos) é que poderia ser reutilizado para apoiar Ajax. Alterar categoria exigiria Ajax chamada ao método getProductsList com o novo ID de categoria.

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