2012-01-20 10 views
8

Ho una domanda su MVC. In particolare sui modelli. Supponiamo di avere una tabella delle categorie nel mio database. Ora vorrei ottenere risultati sia per una singola categoria per la visualizzazione dettagliata e più categorie per una lista. Potrei anche aver bisogno di interrogare un numero di categorie per scopi diversi.Più modelli vs singolo modello

Ora la domanda è; Ha più senso avere due modelli separati. Come il modello di categoria per le operazioni su una singola categoria e operazioni di modelli di categorie su più categorie.

Il mio pensiero è che quando utilizzo il modello category non ho bisogno di ulteriori dettagli per più categorie. Quindi separarli ha senso per me. Ma non sono sicuro.

Qualche idea?

+0

"Adesso Vorrei domande sia una singola categoria per i dettagli" non ha senso. Puoi sistemare per favore? –

risposta

2

Dipende, avete bisogno di salvare i dati diversi per una singola categoria e per più categorie?

Se così è, la proposta ha senso in quanto altrimenti si avrebbero campi ridondanti nel modello. Vorrei consigliare di fare una chiara distinzione tra entrambi i modelli (quindi non Category e Categories, ma ad esempio SingleCategory e MultipleCategories).

Se non è, suggerirei di avere un modello per una categoria, ma con diverse operazioni definite per operazioni di categoria singola e multipla. Presumo che questa sia la tua situazione.

In quest'ultimo caso, è possibile utilizzare una super classe astratta Category e quindi definire due figli: uno che contiene operazioni per singole categorie e uno che contiene operazioni per più categorie.

5

Il problema è che il modello deve supportare la gestione di query di record singole e multiple.

Quindi il mio consiglio è di utilizzare un modello e sviluppare i metodi per recuperare i dati esatti necessari.

Avere due modelli per una singola fonte di dati complica solo roba ...

+2

Non sono d'accordo con questo, penso che il punto della domanda sia stato perso. Innanzitutto è una scelta progettuale se il tuo modello contiene o meno la logica per interrogare il database. Alcuni scelgono di separare la logica con gli oggetti buiness (il modello dati) e gli adattatori/servizi dati che restituiscono elenchi o singoli oggetti di business. In entrambi i casi il punto è che il secondo oggetto proposto non duplica nulla, si limita a riutilizzare un modello esistente memorizzando una raccolta di modelli di istanze singole e alcune proprietà aggiuntive per informazioni su tale raccolta. Questa è una buona idea –

1

Non riesco a vedere alcun motivo per l'utilizzo di più modelli per la stessa raccolta di dati.

In MVC, il modello rappresenta la raccolta di dati, può essere uno o più articoli. Se il modello specifico rappresenta solo un singolo elemento, è ancora la parte della raccolta di dati.

Perché ti stai chiedendo di utilizzare due modelli separati?

0

Dipende solo da TE!

Sei il programmatore qualunque sia la tua convenienza.

Tuttavia per aggiungere il mio ragionamento:

una singola classe modello sarebbe migliore in termini di leggibilità e la manutenibilità!

ad es.

class get_fruits 
{ 

function all_fruit(){} 

function one_fruit(){} 
} 

Questo sarebbe molto facile per un altro programmatore la lettura del codice a capire

esempio

$get = new get_fruit(); 
$europeanfruits = $get->all_fruits("European"); 
$apple = $get->one_fruit ("Apple"); 

Spero che questo aiuti!

Ricorda che non esiste una soluzione giusta o sbagliata per tutto il tempo che funziona per te!

0

A mio parere, elenchi, array, raccolte ecc. Forniti dalla lingua che si sta utilizzando sono scelte valide per le raccolte di modelli e non si dovrebbe creare un modello aggiuntivo che racchiuda semplicemente questa raccolta in quanto non ottiene nulla affatto. Potresti considerare di avvolgere la collezione in un modello se vuoi associare qualche interfaccia con la collezione.

Se è specificamente necessario memorizzare ulteriori informazioni sulla raccolta, è necessario inserirla in un altro modello.

Inoltre non sono d'accordo con l'idea che non si dovrebbero avere più modelli perché i dati provengono dalla stessa origine dati. In effetti, ritengo che non si debba inserire la logica del database nel modello stesso, ma utilizzando un servizio separato che restituisca oggetti di business. Questo livello di incapsulamento consente di manipolare i modelli di alto livello (o oggetti business) a livello di applicazione mentre si disaccoppia la logica di accesso ai dati da questi oggetti. Se è necessario andare e scambiare il database con qualcos'altro, è sufficiente sostituire la logica di accesso ai dati e l'interfaccia che crea i modelli.

1

Quello che abbiamo fatto nel nostro MVC e ORM è che abbiamo creato un wrapper per operazioni su più istanze di modelli. Che è un ResultSet. Il set di risultati è quindi in grado di eseguire operazioni su una serie di modelli di categorie.

Per riferimento: https://github.com/Tuxion/tuxion.cms