Eu, PHP e o Magento

Magento-LogoSempre vi os frameworks como parte do trabalho e não o todo. Eles são frame+work = Um estrutura para desenvolvimento do trabalho. E não todo o trabalho em si.

Confesso, inclusive, que não esperava muito do Magento e que inicialmente tive a mesma reação cética que você tem nesse momento.

Por isso estou escrevendo esse artigo. Para compartilhar com você os motivos pelos quais gostei e pelos quais não gostei desse framework que estou utilizando no momento para programar em PHP(escrito assim mesmo, para deixar claro que a ferramenta que uso para programar não é o FRAMEWORK, mas a linguagem. O framework é o paradigma).

“O framework é o paradigma.”

saraivaO Magento veio por consequência do trabalho que desenvolvo neste momento. A empresa Smart é a responsavel pela maior empreitada já realizada com o Magento: uma loja online novinha em folha para a Livraria Saraiva. Algo que os especialistas(e proprietários do framework) do e-Bay consideram o maior desafio mundial na aplicação do framework. Catálogo gigantesco(e crescendo), milhares de milhares de pageviews, um sem número de clientes, agilidade sem tamanho(os produtos e serviços da Saraiva são atualizados constantemente em reação a mudanças de mercado) em um mercado em guerra permanente, onde alterações no marketshare as vezes são contabilizadas em decimos por cento.

Esse é o cenário em que aprendi(ok, estou aprendendo) a trabalhar com o Magento. Mas o que é Magento?

Segundo a wikipédia ele é, abre aspas…

an open source e-commerce web application that was launched on March 31, 2008 under the name Bento. Magento is a content management system (CMS) based on PHP and MySQL for web hosting service, which was built using parts of the Zend Framework.[1][2]It provides full support for object-oriented programming and Model-View-Controller (MVC) architecture. Magento also uses the entity-attribute-value (EAV) database model to store data.[3] It was developed by Varien (now Magento, a division of eBay) with help from the programmers within the open source community but is now owned solely by eBay Inc.

Vamos a lista de tech words: open source, e-commerce, webapp, CMS, Mysql, ZendFramework, OOP, MVC, EAV. Vou falar

jogo rápido:

1 – Magento é OpenSource?
Sim, vide a licença da versão community Open Software License 3.0.

2 – E a qualidade de código?
Os caras deram uma pisada na bola em muitas coisas, mas parece que estão cientes disso, tanto que o Magento 2.0 começa a tratar com carinho a cobertura de testes(unitario, funcional e de integração).

Existem muitas práticas aposentadas do PHP como o uso de “_” (underscore) para indicar métodos e propriedades privadas, por exemplo. E erros em assinatura de método(parametros opcionais antes de parametros obrigatórios).

O Magento 1 sofre de singletonite mas parece que o doutor já esta tratando o paciente e ele tende a melhorar na 2.0.

Mas nunca se esqueça que o projeto Magento foi lançado em março de 2008. O versão de php que estava sendo lançado na época era a  5.2.6, mas seu desenvolvimento começou no inicio de 2007, indicando que provavelmente ele foi desenvolvido usando a 5.2.0 se os developers estivessem interessados em estar uptodate com o universo. Saiba criticar e tenha sabedoria para ver as consequencias dessa linha histórica.

2 – O que dificulta o aprendizado do Magento?
Duas coisas.
O Magento é flexivel ( e como diria Uncle Ben, com grandes poderes, grandes responsabilidades) e um dos recursos que ele utiliza para ser flexivel é a configuração via XML de sobrecargas de métodos e classes, uma espécie de OOP XML compliance. Sim essa é uma das piadas em torno do Magento, a de que ele é uma plataforma orientada a XML.
A outra coisa é a necessidade de conhecimento de domínio. O magento não é um framework genérico. Ele é um framework de e-commerce escrito sobre um framework genérico(o ZF 1.*). É muito facil encontrar código que tenta aderir ao framework em todas as camadas da implementação. O requisito de conhecimento de negócio aparece também no uso das interfaces de administração e nas práticas de modelagem. Se você não souber a direção em termos de e-commerce vai se sentir perdido, mas nada que a prática e estudo direcionados não superem.

Programar em Magento sem conhecimento de domínio é achar que pode surfar por que viu um documentário sobre fabricação de pranchas. Vários caldos, mas no final os persistentes sempre aprendem a surfar.

 3 – E quanto a lentidão?
Não é mentira que o Magento é lento. De certa maneira isso se dá devido a modelagem EAV e a quantidade de informações que ele carrega com cada um dos objetos. A velocidade também é afetada pelo modelagem flexivel. Ok, tem os memory leaks devido a referencia circular entre os objetos(o ).

Mas é verdade também que existem o APC, os mecanimos de indexação que criam um modelo flat dos dados, os caches de dados e de página e as integrações com Varnish e Redis e outros softwares que controlam alguns desses quisito.

Mas enfim, quais seriam alguns dos itens que um programador deveria ficar de olho ao desenvolver utilizando Magento?

1 – Acoplamento 😦 😦
Models, Helpers, Resources herdam de Mage_Core_Model_Abstract , Mage_Core_Helper_Abstract e Mage_Core_Model_Resource_*. Herdar essas classes é herder funcionalidades e nem todo código que você vai escrever precisa extender essas funcionaldiades.

2 – Uso de singleton 😦
Como disse anteriormente, no momento o magento esta em tratamento contra a singletonite, mas por enquanto eles estão em todo lugar. Utilizar singletons afeta o consumo de memória e modelagem de uma solução.

3 – Observer/Observable 🙂 🙂
O pattern é bem conhecido e amplamente aplicado. O Magento realiza bem esse trabalho e oferece uma extensa lista de trigger por padrão. Ele também permite a adição de novas triggers. Uma boa utilização desse recurso permite atender a muitos dos requisitos de negócio.

4 – Custom Magento Admin Forms 🙂
O administrador do magento e a sua maleabilidade são reflexo de recursos que facilitam em muito a tarefa de criação, alteração e manutenção. Em alguns casos adicionar uma configuração é questão de uma adição em um XML.

tem mais, mas daqui para a frente eu voto por posts mais detalhados.

Opa, quase ia esquecendo. Talvez você queira saber se recomendo a plataforma? Se estou gostando de programar com ela? Se pretendo colaborar no Magento 2.0?
Sim!
Sim!
Sim!

 

Advertisements

4 thoughts on “Eu, PHP e o Magento

  1. Otimo artigo, bem interessante, entretanto gostaria de saber como tem sido lidar com o APC que fora descontinuado e não é recomendando nas versões mais recentes do PHP, como isso impacta?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s