Domanda

appena incontrato il Dottrina progetto che ha un Object Relational Mapper e un layer di astrazione DB. Cosa dottrina prevede che altri livelli di astrazione PHP non lo fanno? E che utilità pratica può mettere l'ORM per, a parte il recupero di oggetti tramite query scritte in Dottrina Query Language? È il linguaggio di query davvero qualcosa si vuole sviluppare un intero web app in? Lo fa funzionare bene?

Nel complesso lo fa costruendo un app sulla Dottrina rendere più facile da mantenere e capire? E 'over-progettato, e sta costruendo su un livello di astrazione sensibile per i progetti di dimensioni medio-piccole? (<50 schermi GUI), anziché operare direttamente con MySQL.

È stato utile?

Soluzione

  

Cosa Dottrina prevede che gli altri livelli di astrazione PHP non lo fanno?

  1. modello Utensili DataMapper piuttosto ActiveRecord.
  2. annotazioni , XML e YAML per lo schema.
  3. DQL .
  4. Utilizza vantaggi di PHP 5.3 +.
  5. è veloce e ha grande comunità.
  6. A parte ORM c'è ODM.
  

È il linguaggio di query davvero qualcosa si vuole sviluppare un intero web app in?

Solo una parte della domanda responsabile per il mantenimento di business-oggetti dovrebbe essere a conoscenza dell'esistenza di dottrina. E quella parte non deve essere al 100% a base di dottrina.

  

Nel complesso si fa costruire un app su Dottrina rendere più facile da mantenere e capire?

Sicuramente. Il codice è più facile da leggere, comprendere e gestire.

  

E 'sovra-ingegnerizzato, ed è ragionevole per i progetti di dimensioni medio-piccole?

In realtà è abbastanza semplice dottrina nei suoi fondamenti. Ed è una scelta molto buona per piccole, medie e anche alcune applicazioni di grandi dimensioni.


dottrina non è la risposta per tutto e, a volte è un po 'problematico. Tuttavia, per le attività tipiche è estremamente utile. IMHO il miglior ORM / ODM per PHP in questo momento.

Altri suggerimenti

Vorrei aggiungere alcuni punti alla risposta di Crozin, ma purtroppo non posso commentare esso. Eccoli:

  • Dottrina non utilizza metodi magici __get () e __set () per gli attributi di entità accesso, tutti gli attributi di entità dovrebbero avere getter / setter. Questo migliora il completamento del codice IDE e non c'è bisogno di guardare la struttura della tabella di DB per tutto il tempo.
  • Dottrina si astrae completamente da nomi di campo vera e propria tabella. Una volta che si è mappato le proprietà di entità ai campi DB - si utilizzano nomi di proprietà in tutto il mondo. Lo stesso vale per i nomi di tabella.
  • Dottrina utilizza Pattern Repository che nasconde i dettagli di ottenere entità.
  • Dottrina utilizza l'approccio "codice di prima", in modo da poter creare entità prima e quindi generare banca dati per loro automaticamente. caso contrario è anche possibile.
  • Dottrina è potente generatore di query, in modo da poter utilizzare builder per le query con le parti condizionali.
  • Dottrina utilizza chiavi esterne e vincoli per eseguire azioni in cascata e mantenere dati coerenti.
  • UnitOfWork di Doctrine è una bella grande e intelligente cosa, che non ha analogo in altri ORM php

IMHO al momento dottrina fornisce miglior supporto completamento del codice IDE e DB livello di astrazione tra tutti ORME php disponibili. E non è finita-progettato e segue i principi solidi.

Mi piacerebbe aggiungere un punto alla risposta di GerKirill. Assenza di supporto per i metodi getter / setter magici è una debolezza, IMHO, non una forza. Se hai mai fatto scorrere decine di pagine di getter / setter identiche, vi renderete conto che questi metodi sono un enorme spreco di spazio (per non parlare di tempo di compilazione). Nessuno imposta accidentalmente una variabile oggetto, e un setter non impedisce di fare che ... quando si desidera cambiare la proprietà, basta chiamare il setter (come fa un setter "proteggere" la proprietà - se si è andando a fare un errore di battitura e impostare direttamente il valore della proprietà sbagliata, si farà lo stesso errore di battitura e chiamare il setter sbagliato). Ed è molto raro che un setter o getter da fare qualcosa di diverso da ottenere o impostare una proprietà. Se si deve fare qualcosa di speciale per impostare o ottenere una proprietà, che la proprietà dovrebbe essere un metodo (vedi http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html ), o si dovrebbe essere refactoring il codice, o si dovrebbe essere chiamando una funzione di validazione di proprietà (in genere al momento della creazione dell'oggetto). Questa è una di quelle banalità non-sfidato che affliggono il mondo OO. Pensateci prima di postare la risposta standard ricevuta-saggezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top