O WordPress MVC é compatível? [fechado]

Algumas pessoas consideram o WordPress uma plataforma de blogging, alguns pensam nele como um CMS, alguns se referem ao WordPress como um quadro de desenvolvimento. Seja qual for, a questão permanece. O WordPress MVC é compatível?

Li os fóruns e alguém perguntou sobre o acidente há três anos. Houve algumas respostas positivas e algumas negativas. Enquanto ninguém sabe exatamente o que é MVC e todos pensam nisso à sua maneira, ainda há um conceito geral que está presente em tudo discussao.

Tenho pouca experiência com os enquadramentos de MVC e não parece haver nada sobre o próprio framework. A maior parte do MVC é feito pelo programador, estou certo? Agora, voltando ao WordPress, podemos considerar o motor de reescrita do núcleo (WP_Rewrite) o controlador? Deseja & lógica de 'plugins' como o modelo? E temas como a vista? Ou estou a perceber tudo mal?

Obrigado.
Author: kovshenin, 2010-05-18

9 answers

O Wordpress em si não é arquitectado em MVC, mas pode-se construir temas e plugins muito orientados para o MVC dentro da estrutura. Existem várias ferramentas que podem ajudar:

Soluções WordPress MVC:

Tópicos de MVC ligados WordPress.org ideias e Trac:

 46
Author: user239974, 2012-12-18 23:21:47

O Wordpress é mais ou menos MVC. Se alguma coisa é um layout do tipo pull MVC, onde a vista 'puxa' dados do modelo. Ele faz isso de uma forma muito procededural, em vez de usar muitos objetos diferentes, mas isso realmente torna os modelos front end mais fáceis de escrever em muitas maneiras.

Isto também dá às vistas algum grau de lógica do controlador (assim o tipo de MVC da horta).

Vamos analisar isto.: Wordpress recebe um URL. O núcleo wordpress atua como um controlador e determina quais as consultas iniciais a executar na base de dados, e por extensão, que vista deve ser carregada (área de categoria, única publicação ou vista de página, etc). Ele então empacota a resposta da consulta inicial e envia-a para o arquivo view.

Esse ficheiro view pode ser um ficheiro só para visualização estrita ou pode solicitar informações/consultas adicionais para além do ficheiro incorporado. Este é o tipo de atração do MVC, onde a vista puxa dados do modelo em vez do controlador 'empurrar' dados do modelo para o visualizar.

Assim, quando a janela vê o código para carregar uma barra lateral ou área de elementos, pede essa informação. No entanto, quais widgets devem estar lá é determinado pelo controlador, que olha para o modelo para que widgets estão na barra lateral, e então seleciona aqueles que estão configurados para mostrar na página atual, e retorna aqueles para a vista.

Que cada parte não é um objecto, não torna isto menos MVC. Você pode alterar o núcleo do WP sem (necessariamente) alterar nada sobre um tema. Da mesma forma, enquanto você usar funções incorporadas como 'get_pages ()', então o modelo e as tabelas de banco de dados podem mudar, desde que essas funções ainda devolvam os dados certos. Assim, o modelo é independente da visão, e o controlador também é independente (exceto quando a visão adiciona lógica de controlador para fazer mais do que o núcleo normalmente faz).

Enquanto você poderia ter um objeto modelo segurando uma série de métodos e coisas como WPModel:: get_pages ('blah blah'), e conter tudo assim, ainda há uma separação fundamental de preocupações.

Ver: ficheiros de modelos Controlador: WP core Modelo: as várias funções que lidam com o tratamento de dados específicos.

Desde que os nomes, argumentos, etc, permaneçam os mesmos (ou apenas tenham novos acrescentados), então a separação de preocupações é mantida e uma pode ser alterada sem perturbar os outros.

Não é uma versão super limpa do MVC, especialmente quando os ganchos se envolvem, mas a um nível básico começa la. E ser investigado sobre isso não é uma coisa má. Um pedido de um site é muito inerentemente procedenteural: é um processo com um começo e fim claros, e só precisa de um procedimento para processar o pedido, obter dados, empacotá-lo, e, em seguida, morrer. Você pode configurar esses passos com objetos e métodos de objetos e layouts OOP (o que tornaria algumas coisas mais fáceis) ou você pode apenas escrever um monte de chamadas de funções e separá-los dessa forma. Os membros da classe gostam de variáveis privadas são perdidos dessa forma, mas dependendo das necessidades da aplicação... podes não te importar.

Não há uma maneira grandiosa de fazer o desenvolvimento, e o WP fica em cerca de 20% dos sites, por isso está a fazer algo certo. provavelmente algo a ver com não fazer com que as pessoas tenham que aprender/memorizar hierarquias complexas de classes para obter o banco de dados para responder à pergunta 'que páginas são filhos da Página x? e lidar com esses dados. Podes facilitar as coisas com o OOP? Sim, mas se Joomla é um exemplo de como é difícil implementar um complexo site personalizado com OOP, então WP é muito mais fácil e mais rápido, e tempo é dinheiro.

 24
Author: Rampant, 2012-01-06 19:55:02
[[1]} Como já mencionado nos comentários, MVC é um padrão de design arquitetônico, não um quadro específico, e não, Wordpress não segue o padrão MVC.

Existe uma separação de visualizações (modelos) da lógica de programação, mas apenas na interface, não no painel de administração e uma separação geral de visualizações e lógica de aplicação não é inevitavelmente MVC. Uma implementação do padrão MVC geralmente assume algum tipo de paradigma de programação orientada a objetos por trás dele e Wordpress é principalmente implementado de forma processual, com simples consultas SQL nas funções PHP, portanto, não tendo um modelo real também.

 9
Author: Daff, 2012-12-18 22:40:41

Apenas para atualizar esta com as mais recentes informações para as pessoas que bater a partir de motores de busca - o wp-mvc plugin http://wordpress.org/extend/plugins/wp-mvc/ vai um longo caminho para a criação de um framework mvc para o desenvolvimento de plugin. Você pode descobrir mais aqui: http://wpmvc.org/documentation/70/tutorial/

 5
Author: Dave Amphlett, 2012-08-13 20:19:20

Um dos tópicos que periodicamente aparece em discussões no que se refere ao WordPress é a idéia de WordPress e MVC.

Mas o problema é que o MVC não é a bala de prata do desenvolvimento da teia que tentamos fazer parecer. Sim, é um padrão de design incrível, e eu pessoalmente acho que ele se encaixa o modelo de aplicação web como uma luva, mas não todos os framework ou plataforma implementa esse padrão de design.

Caso em questão: o WordPress não é MVC.

E isso é ... Certo. Eu acho que precisamos deixar o desejo de tentar empurrá-lo para os nossos projetos de lado, especialmente quando o padrão WordPress fornece não só é suficiente, mas funciona bem quando alavancado corretamente. "Mas eu adoro o MVC!" Eu também! De fato, passei o último ano trabalhando em um projeto que mais ou menos imitava a arquitetura MVC. Um exemplo de alto nível de MVC.

enter image description here

Um exemplo de alto nível de MVC.

Por exemplo:

Views were implemented using templates
Controllers were implemented by a combination of using function names like create, read, update, destroy, delete, and so on (even though these functions were hooked into the WordPress API
Models were functions also were called to validate and verify data prior to serializing the data. Again, this required that certain functions be hooked into WordPress to achieve the desired result.
Finalmente, um conjunto as regras de reescrita deram à aplicação Um conjunto limpo de URLs previsíveis no formato de /people/update/1 ou /people/all. Que Padrão WordPress Implementar?

O WordPress implementa a arquitetura baseada em eventos (dos quais existem várias variações, como o padrão do observador).

Em resumo, você pode conceitualmente pensar nisto como o seguinte:

Things happen when WordPress is processing information.
You can register your own function to fire when these things happen.
Não é muito complicado, pois não? Um exemplo de alto nível de padrões motivados por eventos enter image description here Um exemplo de alto nível de padrões movidos por eventos Quando você começa a pensar em termos do paradigma em que ele funciona ao invés de tentar fazê-lo funcionar da maneira que você quer que ele funcione, é libertador. Ajuda a resolver problemas muito mais facilmente.

A conclusão é a seguinte: o WordPress implementa o padrão de design impulsionado pelo evento, então mesmo que você acabe tentando implementar MVC, você ainda vai ter que utilizar o sistema de gancho.

Se não tiveres cuidado, podes acabar a tentar arquitetura perfeita sem realmente fazer seu trabalho, e assim acabar se encontrando tão alto na atmosfera de software que você efetivamente se tornou um astronauta de arquitetura. Então estás a dizer para evitares padrões de Design? De maneira nenhuma! Os padrões de Design servem um propósito porque, acima de tudo, eles basicamente nos dão soluções para problemas previamente e comumente resolvidos. Usa-os! Mas o que estou a tentar dizer é que não precisamos de forçar as coisas a encaixarem-se. padrão só porque gostamos do padrão. Não é esse o propósito deles. Em vez disso, alavancar o padrão primário que sua plataforma de escolha implementa-no nosso caso, é um padrão de Evento-e, em seguida, implementar padrões onde eles se encaixam (como injeção de dependência ou algo assim). Caso contrário, é como tentar pôr o pé numa luva.

Cortesia (e totalmente copiada: P) de http://tommcfarlin.com/wordpress-and-mvc/

 5
Author: Rahul Balakrishna, 2014-05-22 09:00:04

Só para adicionar à lista de opções, (sou reconhecidamente tendencioso como o autor,) swpMVC é um framework MVC totalmente caracterizado, leve, inspirado por Rails, Sinatra, Express e FuelPHP. Está completamente documentado, e embora eu tenha usado e apreciado wp-mvc , eu queria algo em que os modelos fossem capazes de povoar as próprias vistas, incluindo controles de forma para interagir com esses modelos.

Juntei isto para reduzir a quantidade de código do controlador. necessário para montar um aplicativo em cima do WordPress, e o resultado é um quadro muito rápido e eficaz que funciona dentro do WordPress. Os modelos são baseados em PHP Activerecord e 8 modelos são incluídos para tipos de dados WordPress existentes, incluindo Postmeta, Usuário, UserMeta, Termo, e mais alguns. Dados de modelagem é muito fácil graças à biblioteca activerecord, e eu gostei de trabalhar com este framework imensamente até agora.

Também navios com PHP e PHP inferiores. Profiler (como visto em FuelPHP.)

 4
Author: Brian Zeligson, 2012-08-20 01:07:21

RokkoMVC é uma estrutura micro MVC construída especialmente para o WordPress. O projeto pretende simplificar a funcionalidade AJAX em aplicações WordPress, bem como trazer todos os outros benefícios de usar modelos, vistas e controladores para o seu tema.

 2
Author: rodrigo-silveira, 2012-07-18 21:50:59

Eu tive uma festa recentemente na criação de um plugin que faz uso de um sistema simples de controle de visão, e muito gostou dos resultados, então eu separei o template stuff fora para o seu próprio repo. Ele oferece controladores baseados em objetos, passando variáveis localmente para modelos de PHP, fragmentos de modelo (modelos dentro de modelos) e componentes (fragmentos de modelo com seu próprio sub-controlador). Todos em duas classes minúsculas!

Claro que escrevi este código a pensar que nenhum outro programador WP tinha considerado o problema antes {[[0]}.
 1
Author: halfer, 2013-01-31 14:37:50
Está longe do acidente de Automóvel, não há nada como algumas pessoas dizem, ou é acidente de viação ou não... O fato de que você escreve lógica no nível de visualização não o qualifica como um framework mvc. A razão pela qual as pessoas o usam - é fácil de aprender, você não precisa ser programador de php hardcore, eles são preguiçosos.
 0
Author: lokers, 2013-05-08 16:43:05