Estou iniciando um novo projeto com o symfony, que é prontamente integrado ao Doctrine e ao Propel , mas é claro que preciso fazer uma escolha ... Fiquei me perguntando se as pessoas mais experientes por aí têm prós e / ou contras em geral. qualquer um desses dois?
Muito obrigado.
EDIT: Obrigado por todas as respostas, coisas úteis. Não há uma resposta realmente correta para essa pergunta, então vou marcar como aprovada a que obteve os votos mais populares.
Respostas:
Eu iria com Doutrina. Parece-me que é um projeto muito mais ativo e, sendo o ORM padrão do symfony, ele é melhor suportado (mesmo que oficialmente os ORMs sejam considerados iguais).
Além disso, eu gosto mais da maneira como você trabalha com consultas (DQL em vez de Critérios):
(A implementação da Doutrina é muito mais intuitiva para mim).
Além disso, eu realmente prefiro a maneira como você gerencia as relações no Doctrine.
Acho que vale a pena ler esta página da documentação do Doctrine: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
Resumindo: se eu estivesse iniciando um novo projeto ou tivesse que escolher entre aprender Doutrina e Propel, eu iria para Doutrina qualquer dia.
fonte
Sou tendencioso, já que ajudo um pouco na próxima versão do Propel, mas você deve considerar que o Propel foi realmente o primeiro ORM disponível, e ficou um pouco atrasado quando o Doctrine foi criado, mas agora tem desenvolvimento ativo novamente. O Symfony 1.3 / 1.4 vem com o Propel 1.4, onde a maioria das comparações pára no Propel 1.3. Além disso, a próxima versão do Propel (1.5) conterá muitas melhorias, especialmente na criação de seus Critérios (resultando em menos código para você escrever).
Eu gosto do Propel porque parece ser menos complexo que o Doctrine: a maioria dos códigos está nas poucas classes geradas, enquanto o Doctrine dividiu a funcionalidade em várias classes. Eu gosto de ter um bom entendimento das bibliotecas que estou usando (não muito "mágica"), mas é claro que tenho mais experiência com o Propel, então talvez a Doutrina não seja tão complicada nos bastidores. Alguns dizem que o Propel é mais rápido, mas você deve verificar isso por conta própria e considerar se isso supera outras diferenças.
Talvez você deva considerar também a disponibilidade dos plugins Symfony para as diferentes estruturas. Acredito que o Propel tenha uma vantagem aqui, mas não sei quantos dos plugins listados ainda estão atualizados com a versão mais recente do Symfony.
fonte
Isso se trata de preferência pessoal. Eu uso o Propel porque (entre outras coisas) gosto do fato de que tudo tem seu próprio método getter & setter concreto. Em Doutrina, esse não é o caso.
Impulsionar:
Doutrina:
A razão pela qual eu gosto de ter getters e setters é que posso colocar todo tipo de lógica neles, se necessário. Mas essa é apenas a minha preferência pessoal.
Devo acrescentar também que, embora o Propel tenha se movido lentamente no passado, ele agora está em desenvolvimento ativo novamente. Ele lançou várias novas versões nos últimos meses. A versão mais recente do Propel inclui uma "interface de consulta fluente" semelhante à do Doctrine , para que você não precise mais usar os Critérios se não quiser.
fonte
Deve-se notar Doutrina 2 é
atualmente em desenvolvimentolançado [ed] e funções quase completamente diferente da versão estável atual de Doutrina 1. Ele se baseia no padrão Data Mapper vez de Active Record, e usa um 'gerenciador de entidade' à persistência punho lógica. Quando lançado, ele terá uma semelhança mais próxima com o Hibernate do Java (a Doutrina 1 é mais parecida com o ActiveRecord do Rails).Estou desenvolvendo com a versão alfa da Doutrina 2 e devo dizer que ela está acima da Doutrina 1 (apenas minha opinião, e nunca usei Propel). É bem provável que a comunidade de Doutrina se mova em direção a ela quando for lançada.
Gostaria de encorajá-lo a conferir o Doctrine, mas se você preferir o estilo Active Record que o Propel e o Doctrine usam agora, convém ficar com o Propel.
fonte
As duas referências estão um pouco desatualizadas, portanto, você cobre algumas generalidades. Basicamente, você teria que avaliar sua experiência com a estrutura, uma grande desvantagem da doutrina é a incapacidade de ter um IDE que permita o código automático dessa propulsão. vencedor, as curvas de aprendizado propulsão e doutrina são muito diferentes, é mais fácil impulsionar, se seu projeto precisar gerenciar um modelo de dados complexo, use doutrina, se você quiser trabalhar rapidamente com um ORM que seja melhor documentado e encontrar mais suporte no Propel Os usos da Internet, são muito mais maduros e acredito que os mais utilizados.
http://propel.posterous.com/propel-141-is-out
fonte
Eu sugiro usar o propel 1.6, que é melhor para a função de preenchimento automático do IDE.
fonte
Eu não sou usuário do ORM fora da estrutura do PHP 5, mas aqui estão algumas boas postagens de comparação (caso você ainda não as tenha visto):
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
Ambos os favoritos são favoritos para o Doctrine como uma nova geração de ORM para Symfony.
fonte
Depois de usar os dois por vários anos, prefiro o Propel 2 ao Doctrine simplesmente com base em como você constrói sua lógica de consulta. A doutrina é o mais aprofundada possível e o gerenciamento de muitos aspectos dela corresponde a esse nível de profundidade. O Propel sinto que existe uma maneira mais fluida e orientada a objetos de criar e gerenciar as interações de consulta.
Para mim, isso levou a menos código no modelo e mais estruturas em torno de como a lógica pode / será processada. Isso resultou na criação de muitas interações como funcionalidade comum. (Afinal, 90% do que você fará com um banco de dados será apenas um certo grau de operação bruta.)
No final, ambos são poderosos, gerenciáveis e farão o trabalho. Meus projetos e interesses pessoais usam o Propel ORM 2 e projetos futuros, se ainda estiverem escritos em PHP, seguirão esse caminho.
Eu tenho usado os dois diariamente nos últimos 3-4 anos.
fonte
Eu sugiro usar o DbFinder Plugin . Na verdade, este é um plugin muito poderoso que suporta os dois e é bastante poderoso. Na verdade, eu gosto de usá-lo melhor do que qualquer um.
fonte
Se não estou errado, os dois ORMs usam esquema baseado em XML, e a criação dessa definição de esquema é bastante complicada. Se você precisar de um esquema simples baseado em PHP com estilo fluente. Você pode tentar o LazyRecord https://github.com/c9s/LazyRecord, que suporta migração automática e geradores de script de upgrade / downgrade. E todos os arquivos de classe são gerados estaticamente sem custo de tempo de execução.
fonte