2011-09-21 10 views
14

Stiamo creando un SaaS che monitora determinate risorse. Ciò significa che acquisisce i dati, li salva e li visualizza in un'interfaccia web.Come condividere un modello Symfony2 con diversi progetti

Per questo, abbiamo pochi componenti che abbiamo creato con/si stanno muovendo per Symfony2:

  • un'applicazione frontend web, dove gli utenti possono visualizzare i propri dati
  • un back-end di applicazioni web di amministrazione, dove abbiamo creare nuovi monitor, utenti, ecc.
  • un'API
  • un'applicazione che recupera i dati ricevuti da una coda e li inserisce nel nostro database (questo è ora uno script separato, ma sto pensando di rielaborarlo come Comando di symfony chiamato da cron)

Tutte queste quattro applicazioni condividono lo stesso modello di: il nostro database principale che contiene tutti gli utenti, monitor e dati.

La mia domanda è: come dovrei strutturare questi progetti in Symfony2?

  1. Creo un bundle separato che contiene le entità per il mio database e i quattro progetti includono quelle entità e funzionano con esse?
  2. Posso creare una directory 'modello' nella mia cartella app Symfony, che è usata da tutti i bundle nella mia directory/src?
  3. Qualche altro modo più semplice per farlo?

L'opzione 1 sembra un po 'strana, dal momento che un pacchetto, a mio parere, ha bisogno di routing, visualizzazioni, controller, ecc. Usarlo solo per le entità sarebbe un po' strano.

L'opzione 2 sembra accettabile, poiché la cartella/app è considerata "comune" in ogni caso per tutto ciò che si trova nella cartella/src (poiché, ad esempio, anche i parametri sono presenti in tale cartella). Tuttavia, non esiste una cartella 'modello' lì, e non sono sicuro che ci dovrebbe essere?

Capisco che ci sono pochissime "buone pratiche" già disponibili per Symfony 2, poiché è nuovo di zecca. Ma volevo vedere se ci sono pratiche più preferibili rispetto ad altre, secondo la tua opinione.

Qualsiasi feedback è più che benvenuto. Grazie in anticipo,

Dieter

risposta

6

Quello che sto facendo attualmente è la prima opzione: creare un pacchetto separato per i tuoi soggetti. Ecco dove immagazzino dispositivi, entità, moduli e test relativi alle entità.

Un fascio fa NON necessario disporre di routing, controllori, viste, ecc In realtà ho visto un fascio progetto, e tutto ciò che fa è di navi risorse blueprint-css con esso in modo che possano essere facilmente riutilizzati in progetti.

Come aggiungere modelli alla directory app ... Non mi piacerebbe. Vedo la directory app come un luogo in cui dovrebbe essere tutta la configurazione. Anche se è possibile ignorare le viste in app/Resources, ogni volta che si desidera eseguire l'override di qualcosa, creo un nuovo pacchetto.

+0

Questo è quello che dovevo sapere :) Grazie! – Dieter

1

Non ho usato questa tecnica me stesso in uno Symfony2 app mondo reale - ma si tratta di un puntatore come lei ha chiesto per tutte le risposte.

La service container sembra essere il metodo Smyfony2 per rendere i servizi disponibili a livello globale. Quindi nel tuo caso gli oggetti di accesso al modello saranno definiti come servizi come discusso nel link fornito e potranno quindi essere utilizzati da qualsiasi pacchetto.

Ora in cui bundle fanno gli oggetti del servizio vanno? Possiamo metterli in un bundle separato poiché sono condivisi con altri bundle. Tuttavia, presumo che il modello non sia perfettamente simmetrico per tutti i bundle, quindi possiamo mettere il modello condiviso in un bundle separato, e mettere le entità specifiche del bundle nel pacchetto stesso. Quindi le tecniche di iniezione illustrate nel link sopra possono essere utilizzate per fornire un modello completo specifico per ciascun pacchetto.

Questo sembra fornire la massima disaccoppiamento.

Sono interessato a qualsiasi commento su questo anche perché è uno scenario di progettazione comune.

Saluti.

+0

Ciao m8, grazie per il feedback. Per il mio particolare scenario, i repository personalizzati erano ciò di cui avevo bisogno e li ho inseriti in un ModelBundle "condiviso". Le entità e le prove di entità e tali anche andare lì. Tuttavia, sto arrivando a creare un servizio che dovrà essere condiviso, ma che non ha nulla a che fare con il mio modello (è per inviare SMS, in un caso). Non so ancora come strutturarlo, ma sto pensando alla tua stessa linea. Sono abbastanza sicuro che li inserirò in un pacchetto separato, in cui tutti i servizi potrebbero essere condivisi. Non sono sicuro se questa è la strada da percorrere? – Dieter

Problemi correlati