59 votes

Redbean contre Doctrine

J'ai trouvé RedBean aujourd'hui sur StackOverflow et je me demandais s'il fallait l'utiliser au lieu de Doctrine.

J'ai lu beaucoup de choses sur Doctrine et commençait tout juste à l'utiliser. Même s'il fonctionne maintenant, je pense qu'il n'est pas vraiment facile à utiliser pour commencer. Si je compare la documentation (pour Doctrine y RedBean ) Je préférerais RedBean parce qu'il est très facile à comprendre avec des exemples simples. Sans essayer, je peux voir qu'il sera opérationnel en 5 minutes.

Je suppose que le mauvais côté de RedBean apparaîtra plus tard. Doctrine semble être un outil bien développé, bien testé, et semble être le choix le plus sûr. Je suis sûr qu'il n'y a pas de réponse facile, mais aidez-moi à décider lequel est le meilleur pour moi en me donnant quelques pour et contre.

Exemples de code (Doctrine / Readbean)

// create
$order = new models\Order();
$order = R::dispense('order');

// save
$this->em->persist($order);
$this->em->flush();
R::store($order);

// get row by id
$shop = $this->em->find('models\Shop', $shop_id);
$shop = R::load('shop', $shop_id);

Avis : J'ai changé la réponse acceptée de hakre à Xerosigma car elle donne une meilleure vue d'ensemble. Veuillez noter que réponse de hakre fournit des informations supplémentaires.

43voto

hakre Points 102271

Je pense que vous devriez vous familiariser avec les modèles qui se cachent derrière ces deux couches d'abstraction de base de données.

Tout d'abord, les deux traitent des bases de données relationnelles. C'est un point commun entre eux. Les deux offrent une couche pour accéder aux données dans votre programme sans avoir besoin d'exécuter des commandes SQL nues, les deux offrent une couche de persistance.

Pour les différences, je l'envisagerais :

Toutefois, cela ne doit pas en dire beaucoup sur votre cas d'utilisation. Par exemple, si la structure de la base de données existe déjà, l'utilisation des deux bibliothèques peut être différente.

Regardez donc d'abord ce dont vous avez réellement besoin. Comment votre application est-elle conçue ? Si elle est légère Transaction scripts et votre base de données n'est pas très complexe, le RedBean semble utile car il semble, d'après votre question, que vous pensez qu'il fait le travail et que vous êtes positif à son sujet. Il n'est pas productif d'utiliser une bibliothèque avec laquelle vous trouvez difficile de travailler.

D'autre part, si vous utilisez une Modèle de domaine dans votre application, Doctrine me semble plus approprié.

Je pense que les deux composantes sont bien développées, donc vous obtiendrez beaucoup dans les deux cas.

Un autre point sur lequel je me déciderais concerne la façon dont vous gérez les risques et les problèmes. Par exemple, vous ne pouvez pas encore voir dans l'avenir quels problèmes vous rencontrerez avec la couche de persistance de votre application.

Au lieu de penser à ce qui pourrait éventuellement mal tourner dès la phase de conception, il est souvent préférable de commencer à réunir les composants par petites itérations afin de pouvoir connaître et comment la couche de persistance fonctionne avec votre application. Et vous connaître les problèmes, ce qui est beaucoup plus utile pour les traiter.

25voto

Xerosigma Points 785

J'étais à la même croisée des chemins récemment et j'ai PÉNiblement décidé d'opter pour Doctrine. Ne vous méprenez pas, ce que RedBeanPHP propose est une bête de développement rapide, mais il manque de véritables nécessités au niveau de l'entreprise.

RedBeanPHP

PROS

  • Parfait pour le développement rapide et le prototypage
  • Facile à apprendre et à mettre en œuvre.
  • Fonctionne sans effort avec le code existant.
  • Vous n'avez pas besoin d'un schéma préexistant.

CONS

  • Ne prend en charge que les bases de données relationnelles.
  • Un développeur
  • Pas de support au niveau de l'entreprise.

Doctrine

PROS

  • Une solution ORM familière. Fonctionne comme prévu.
  • Soutien aux entreprises.
  • Un soutien solide.
  • Prise en charge des bases de données non relationnelles.

CONS

  • Pas aussi vite. (Développement en temps)
  • Pas aussi génial.
  • Juste... ORM.

J'ai décidé d'opter pour Doctrine en raison de sa prise en charge des bases de données non relationnelles, ce qui est absolument essentiel dans une application basée sur une infrastructure en nuage. J'encourage son utilisation dans tous les cas, car il présente une manière standard d'implémenter un ORM. Quoi qu'il en soit, ils sont tous deux excellents, j'aurais peut-être sacrifié le professionnalisme pour RedBeanPHP s'il supportait les bases de données non relationnelles :/

24voto

Gabor de Mooij Points 1963

RedBeanPHP peut travailler avec des modèles de domaine ; les beans sont connectés à la volée aux modèles. Par exemple, disons que nous avons un bean de page :

$page = R::dispense('page');
R::store($page);

Si nous faisons maintenant un modèle de page plus tard, RedBeanPHP trouvera le modèle et vous serez en mesure d'ajouter des crochets pour store (update) et d'autres méthodes similaires à R:: :

Model_Page extends RedBean_SimpleModel {
    public function update() { ... gets called by R::store... }
} 

Même les méthodes personnalisées sont acheminées vers le modèle :

$page->addElement();

Vous pouvez donc avoir un modèle de domaine comme dans Doctrine, mais vous ne devez pas écrire les modèles en amont, vous pouvez écrire les modèles après.

De plus, en utilisant la classe ModelFormatter vous pouvez indiquer à RedBeanPHP comment trouver les modèles auxquels vos beans appartiennent, si vous voulez utiliser des conventions de nommage différentes par exemple.

Plus d'informations sur FUSE : http://www.redbeanphp.com/manual/how_fuse_works

3voto

encodes Points 660

L'ajout d'une doctrine au code existant impliquera soit d'écrire des objets pour chaque table qui correspondent directement à la table de la base de données. Je suis sûr qu'il existe un outil pour faire cela, mais cela vaut la peine d'y réfléchir. Il existe également de nombreux tutoriels sur le site Web de doctrine.

Je ne suis pas sûr de votre expérience en php, mais il peut être intéressant d'envisager d'utiliser les deux et de décider ce qui convient le mieux à vos besoins. Cela peut prendre plus de temps mais vous apprendrez beaucoup plus.

J'ai récemment assisté à une conférence sur la doctrine et les choses qui y sont dites sont vraiment bonnes. Le concept sur l'utilisation d'objets plutôt que l'interrogation de la base de données ne peut être qu'une bonne chose dans les grands programmes.

Je n'ai jamais utilisé Redbean, mais en regardant la documentation, le concept de ne pas avoir besoin d'un modèle est plutôt intéressant, surtout si vous l'ajoutez à un code existant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X