È buona pratica restituire un array di oggetti?

3

Se ho una classe ItemContainer che contiene, ad esempio, articoli in un ordine, in cui ogni articolo è un oggetto Item; è meglio avere un metodo come:

ItemContainer->getItems() 

che restituisce un array contenente oggetti Item, oppure è meglio fare qualcosa del tipo:

ItemContainer->getItem($itemNo) 

che restituisce un singolo oggetto item per quel numero oggetto e rinvia l'array. Mi rendo conto che questa potrebbe essere una domanda banale o semplicemente una delle preferenze, ma mi piacerebbe che la mia app adottasse le migliori pratiche fin dall'inizio e non sono sicuro su quale strada proseguire. Sto scrivendo in PHP, ma ho pensato che questo valga praticamente per qualsiasi linguaggio OOP.

    
posta r.bilgil 18.09.2013 - 16:57
fonte

3 risposte

4

I principali motivi per non seguire l'approccio ItemContainer->getItems() e restituire un array sono:

  1. È probabile che l'implementazione iniziale restituisca semplicemente un riferimento all'array originale, che consentirebbe al chiamante di modificare la raccolta sottostante. Questo è considerato una cattiva pratica.
  2. Il prossimo lavoro è quindi creare una copia dell'array e restituirlo. Ciò è negativo perché un chiamante può pensare che stia ancora modificando la raccolta sottostante ed è anche costoso per le raccolte di grandi dimensioni.

Se il chiamante vuole davvero avere una copia dell'array, quindi itemContainer->cloneItems() è molto più chiaro e meno probabilità di essere usato in modo inappropriato.

Se il chiamante desidera semplicemente avere un singolo elemento, quindi fornire un

itemContainer->getItem(index && key)

è chiaro ed efficiente

Se il chiamante vuole iterare sugli articoli, fornendo un

itemContainer->getItemIterator()

è più chiaro. A seconda della lingua che puoi implementare

itemContainer->VisitItems(visitor)

dove visitor è un visitor class, delegate o function pointer.

Spero di averti dato alcune idee su come questo possa essere affrontato in modo diverso

    
risposta data 18.09.2013 - 17:19
fonte
1

Perché non entrambi? Generalmente, poiché prima di 5.4 il PHP non supportava il dereferenziamento del ritorno di una funzione, era normale restituire una matrice di oggetti, e quindi se la chiave dell'array restituito era passata in quella funzione, la funzione restituiva solo quel valore.

È PHP, quindi stai lavorando in un linguaggio tipizzato dinamicamente. Se vuoi maggiore sicurezza, puoi sempre creare un oggetto separato per la memorizzazione degli elementi, come ItemCollection . Questo sarebbe un approccio che vedresti in linguaggi come Java o C# .

    
risposta data 18.09.2013 - 17:10
fonte
0

dipende:

  • la restituzione di un array ti consente di passare direttamente al foreach idiomatico della lingua

  • ma utilizzando get basato su indice significa che non è necessario allocare l'array e spingere tutti gli elementi in esso.

risposta data 18.09.2013 - 17:00
fonte

Leggi altre domande sui tag