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 :)
Respostas:
Apesar da tendência atual de recomendar Doutrina, preciso dizer o contrário. Lembre-se também de que minhas preferências pessoais são orientadas para minhas experiências pessoais, mas como @Dan disse, ambas são muito potentes.
Eu não gosto de Doutrina por várias das razões que você declarou antes, como o tamanho e os métodos mágicos inteiros são os problemas comigo. Então, eu uso o Propel , por quê? principalmente porque é simples e porque simples no desenvolvimento de software é bom . Minha opinião pessoal é que ficar ganancioso com os projetos é ruim.
Usando o Propel, consegui implementar uma implementação de padrão de repositório para meus próprios sistemas e funciona muito bem, sem mencionar o desempenho do Propel, que é um dos ORM mais rápidos que já vi.
Portanto, minha resposta básica é a Propel , porque ela realiza um bom software com menos código e capacita o IDE a fornecer um bom senso de inteligência sem perder o objetivo do software ORM que está se conectando ao banco de dados e fazendo com que seja agradável ...
Espero poder ajudar
fonte
Suas informações sobre Doutrina 2 estão erradas ...
Eu nunca usei o Propel antes, mas o Doctrine 2 é muito mais recente e possui uma base de código de alta qualidade. Mas parece que o Propel usa o Active Record, o Doctrine 2 usa o padrão Data Mapper.
A desvantagem de Doctrine 2 ser mais recente é a falta de exemplos de terceiros, mas está crescendo rapidamente.
Eu recomendo a Doutrina 2 ...
fonte
__get
e__set
(o que é verdade) e não em métodos reais.A partir dos seus comentários, parece que você está tentando escolher o Propel ou o Doctrine para substituir ou atender à sua necessidade de um ORM em um aplicativo herdado.
Dito isto, acho importante não perder de vista o fato de que mudar para um deles pode ser uma grande melhoria para o seu aplicativo. Portanto, não há resposta realmente errada.
Portanto, a solução que você escolhe depende muito das suas preferências, com base nas suas respostas às seguintes perguntas:
Pessoalmente, eu recomendaria o Doctrine 2 por causa de sua comunidade, documentação e arquitetura.
fonte
Eu recomendo que você Propel, porque é bem integrado, rápido e poderoso. Gerar código é melhor do que carregar classes no tempo de execução, facilita as etapas de depuração e mostra o que você criou. Portanto, a etapa de construção não é um problema.
O Doctrine2 não possui comportamentos oficiais, e o padrão de design do DataMapper é legal, mas difícil de usar na vida real. Ah, e DQL é uma dor, mas aborda a linguagem para aprender ...
Se você quiser pensar com objetos (sem DQL / SQL / o que seja), escolha Propel.
A Doutrina 2 faz parte do Symfony2 de fato, mas as coisas vão mudar muito em breve, veja o último artigo sobre Fabien Potencier.
Cheers, William
fonte
Ambos são muito bons. Existem alguns casos extremos em que um pode fazer algo ou fazer algo melhor do que o outro. Onde quer que eu tenha tido problemas com ambos, isso se deve mais à minha falta de conhecimento do que a algo que eles não podem fazer.
Isso significa que a documentação e o suporte são mais importantes que a capacidade intrínseca do código. Você conhece alguém que possa ajudá-lo quando tiver problemas? Você se dá bem com a documentação? Um deles simplesmente 'parece' mais natural para você?
fonte
Eu escolhi o Propel 1.63 para um grande aplicativo mysql legado (200 tabelas ou mais) - os fatores aqui incluídos: suporte a IDE que permite que novos desenvolvedores encontrem seu caminho facilmente com a conclusão de código; suporte a esquema de banco de dados cruzado, desempenho; melhor suporte nativo para enums e o uso de vários comportamentos. Na verdade, comecei com o Doctrine, já que este era o melhor suporte do Symfony2, mas uma vez que a Propel melhorou bastante o suporte ao Symfony (a próxima plataforma para a qual eventualmente migrarei), mudei devido ao melhor tratamento dos problemas acima. Sem arrependimentos Propel é um vencedor decisivo.
fonte