Blog - Luiz Gustavo Web

Neste espaço me dedico a escrever artigos sobre GNU/Linux e desenvolvimento web.
Sinta-se à vontade.

Porque WordPress é uma plataforma muito ruim para desenvolvimento

1º de Fevereiro de 2018

WordPress é um conhecido CMS (Content Management System) desenvolvido em PHP. Lançado em 2003, sua concepção inicial era fornecer uma plataforma para blogs.  Ao longo dos anos, o ecossistema em volta da plataforma foi crescendo de forma avassaladora e, hoje, nada mais nada menos que 29% da web roda sobre ele, o que representa uma soberba fatia da internet.

Vários temas e plugins com inúmeras finalidades foram sendo criados fazendo com que a plataforma não se limite à apenas blogs. Em contrapartida, nada foi feito em prol para melhorar sua arquitetura. Várias dívidas técnicas foram ascendendo e o descuido com a qualidade de código e falta de critério em aceitar ou não inserções de features na plataforma, tornaram o sistema inchado.

Neste artigo apresento alguns bons motivos para não escolher WordPress como sua plataforma de desenvolvimento:


Padrão de projeto

Não existe padrão de projeto no WordPress. O que existe são milhares de funções e algumas classes distribuídas em centenas de arquivos e uma boa esperança que tudo isso de alguma forma funcione.

Esqueça separação de regras de negócio e apresentação. É tudo junto e misturado! Pensar que um dia seu slogan já foi Code is Poetry é uma piada de mau gosto.

Poderíamos classificar WordPress como Spagheti Code. Ele usa e abusa do Observer Design Pattern. É praticamente tudo orientado a eventos por hooks (actions e filters) espalhados por todo o sistema. Poderíamos resumir,  desse jeito, a forma que o WordPress trabalha:

add_action('save_post', 'my_save_post', 10, 3);

function my_save_post($post_ID, $post, $update) {
    // regra de negócio
}

Como WordPress não conhece Namespaces, seu papel para entender como um sistema funciona é procurar por todo o diretório de arquivos por determinada action. Pelo menos você fica craque com o comando grep.

Banco de Dados

Os dados armazenados no banco é o ativo mais valioso de um projeto. E se seus dados são salvos em uma estrutura desorganizada?

WordPress parece pouco se importar em relação a banco de dados. A forma que ele armazena valores e cria relacionamentos a partir das taxonomias são ambos terríveis. Não existe modelos ou entidades para a maioria das features.

Dados serializados torna a leitura ou busca de valores dificultosas através de consultas triviais:
33 | active_plugins | a:4:{i:0;s:37:"mailchimp-for-wp/mailchimp-for-wp.php";i:1;s:35:"hero-slider/hero-slider.php";i:2;s:25:"wizard/wizard.php";i:3;s:43:"strong-testimonials/strong-testimonials.php";}

Cultura

A base de código do Wordpress nunca foi essas maravilhas. Para dizer a verdade, WordPress criou uma cultura muito ruim entre a comunidade de desenvolvedores, desvalorizando a profissão e manchando ainda mais a linguagem PHP.

Ao longo do tempo eu identifiquei 4 grupos de pessoas com tendência a gostar desta plataforma:

o famoso sobrinho: aquele indivíduo que diz saber fazer um site, mas não conhece elementos básicos de programação e tampouco se preocupa com qualidade de código.

desenvolvedor marketeiro: profissional que não conhece nada além do WordPress e jura ser um desenvolvedor PHP sênior. Participa de muitos eventos e palestras, afinal, networking é tudo!

desenvolvedor frontend: como um caminho natural, decide-se aventurar no mundo backend. Corre o risco de escolher a pior plataforma possível para esta nova etapa.

gerente ou patrão: profissional inserido no dia a dia de TI, possui soft skills e sabe gerir uma empresa ou time, mas não tem tempo de estudar programação. Curte WordPress por ser fácil, além da infinidade de temas e plugins disponíveis.

Seria injusto dizer que não existe bons desenvolvedores que optam por utilizar esta plataforma. Mas, além de poucos, seriam mais úteis e produtivos caso utilizassem um framework ou CMS alternativo.


Inconsistência com nomes e finalidades das funções

Algumas funções são prefixadas com wp_ para evitar colisão com funções nativas do PHP. Outras foram simplesmente nomeadas desse jeito sem um motivo aparente, demonstrando a falta de cuidado dos mantenedores desta plataforma.

Outro caso são os pares de funções no WordPress onde uma cospe e a outra retorna:
// Exibe o retorno automaticamente
the_content();

// Apenas retorna, útil para atribuir a variáveis
$content = get_the_content();
Isso claramente foi feito para ser amigável com não-programadores. Uma função que simplesmente retorna não bastaria? Ora, se quero exibi-la, eu simplesmente posso executar echo function().
echo get_the_content();

$content = get_the_content();

Mas tudo bem, isso é o menor dos problemas.


Globais

WordPress é o rei das funções e variáveis globais. A chance de haver uma colisão de nomenclatura é alta. Isso denota a má arquitetura desta plataforma.
global $wpdb, $post, $blog_id, $site_id, $domain, $path;


URLs absolutas

Podemos dizer que o WordPress tem uma tara por URLs absolutas. Mover o projeto para outro ambiente de desenvolvimento ou trocar o domínio do site, não é uma tarefa simples. Você terá o trabalho irritante de procurar e substituir URLs marretadas pelo nosso querido WordPress por todas as tabelas do seu banco de dados. A melhor maneira é abrir o arquivo SQL e fazer um search and replace.


Multisite

Os problemas com banco de dados no WordPress ainda não acabou. Suponha que você decida usar WordPress como Multisite. Ao criar um novo site, ele simplesmente gera uma série de 10 novas tabelas no banco de dados:
wp_1_commentmeta, wp_1_comments, wp_1_links, wp_1_options, wp_1_postmeta, wp_1_posts, wp_1_term_relationships, wp_1_term_taxonomy, wp_1_termmeta, wp_1_terms
Mais um site, mais 10 novas tabelas:
wp_2_commentmeta, wp_2_comments, wp_2_links, wp_2_options, wp_2_postmeta, wp_2_posts, wp_2_term_relationships, wp_2_term_taxonomy, wp_2_termmeta, wp_2_terms
Imagine 1000 sites...

Debug

Já se arriscou a habilitar o debug no arquivo wp-config.php? Se prepare para ver seu projeto capotar com erros por todo o sistema, inclusive em plugins.

Isso demonstra a qualidade dos programadores que constroem o ecossistema do WordPress, onde pouco se importam em algo primário como declarar variáveis e evitar o warning de variável não identificada, visto que a maioria deles desabilitam esta notificação via diretivas do PHP. 


Segurança

Um código que não é bem elaborado ou testado tende a ter mais erros e consequentemente brechas. WordPress é a plataforma preferida entre os hackers.

Sempre argumentarão que ela é a plataforma mais utilizada. Parece que a Microsoft sofre do mesmo problema. Ambos tem uma base de código horrível. Curioso, não?


Conclusão

WordPress pode ser bom para qualquer um, menos para o (bom) desenvolvedor.

Utilizar WordPress para algo que não seja um simples blog é insanidade. O tempo para desenvolver um projeto e se adequar a forma como ele trabalha é maior que o tempo de criar um sistema a partir de um framework.

© 2006 - 2018