Gostaria de ouvir aqueles que usaram a Doutrina 2 (ou mais recente) e o Propel 1.5 (ou mais recente). A maioria das comparações entre esses dois mapeadores relacionais de objetos é baseada em versões antigas - Doutrina 1 versus Propel 1.3 / 1.4, e os dois ORMs passaram por reformulações significativas em suas revisões recentes. Por exemplo, a maioria das críticas ao Propel parece estar centrada nas classes "ModelName Peer ", que são preteridas na versão 1.5 em qualquer caso.
Aqui está o que acumulei até agora (e tentei tornar essa lista o mais equilibrada possível ...):
- Impulsionar
- Prós
- Extremamente compatível com IDE, porque o código real é gerado, em vez de confiar nos métodos mágicos do PHP. Isso significa que recursos do IDE, como conclusão de código, são realmente úteis.
- Rápido (em termos de uso do banco de dados - nenhuma introspecção de tempo de execução é feita no banco de dados)
- Migração limpa entre versões de esquema (pelo menos na versão 1.6 beta)
- Pode gerar modelos PHP 5.3 (por exemplo, namespaces)
- Fácil de encadear muitas coisas em uma única consulta ao banco de dados com
useXxx
métodos como métodos. (Veja o vídeo "conclusão do código" acima)
- Contras
- Requer uma etapa de compilação extra, ou seja, a construção das classes de modelo.
- O código gerado precisa ser reconstruído sempre que a versão do Propel for alterada, uma configuração for alterada ou o esquema for alterado.
Isso pode não ser intuitivo para alguns métodos perdidos e personalizados aplicados ao modelo. (Eu acho?)- Não é verdade; métodos personalizados não são perdidos porque a classe gerada é uma classe base; O Propel fornece uma classe de entidade especificamente para extensão. - Alguns recursos úteis (ou seja, comportamento da versão, migrações de esquema) estão no status beta.
- Prós
- Doutrina
- Prós
- Mais popular
- A linguagem de consulta da doutrina pode expressar relacionamentos potencialmente mais complicados entre os dados do que facilmente possível com a estratégia ActiveRecord da Propel.
- Mais fácil adicionar comportamentos reutilizáveis quando comparados ao Propel.
- Os comentários baseados no DocBlock para criar o esquema são incorporados no PHP real, em vez de em um arquivo XML separado.
- Usa namespaces PHP 5.3 em todos os lugares
- Contras
- Requer o aprendizado de uma linguagem de programação totalmente nova (Doctrine Query Language)
- Implementado em termos de "métodos mágicos" em vários lugares, tornando o preenchimento automático do IDE inútil.
- Requer introspecção de banco de dados e, portanto, é um pouco mais lento que o Propel por padrão; o cache pode remover isso, mas o cache adiciona uma complexidade considerável.
- Menos comportamentos estão incluídos na base de código principal. Vários recursos fornecidos pelo Propel (como o Conjunto aninhado) estão disponíveis apenas através de extensões.
- Freakin 'ENORME :)
- Prós
Embora eu tenha adquirido isso apenas através da leitura da documentação disponível para as duas ferramentas - ainda não construí nada.
Eu gostaria de ouvir aqueles que usaram as duas ferramentas, para compartilhar sua experiência sobre os prós / contras de cada biblioteca e qual é a recomendação deles neste momento :)