Ho una classe per creare oggetti da una riga del database. Come progettare una classe per eseguire funzioni su tutte le righe, ad es. conta sulla tabella db

6

Dire che ho un database per la memorizzazione dei dati delle auto. Ogni riga è essenzialmente un'auto e ho una classe che prende una riga dei dati e costruisce il mio oggetto auto.

Ora voglio creare una dashboard che possa dirmi tutti i tipi di auto, ad es.

Type        Amount
BMW           12
Ford          7

Sto cercando di capire come meglio progettare la funzionalità. I miei pensieri finora sono stati:

  • Chiamata di funzione statica in una classe di funzioni generiche. Conta la tavola. Non esattamente un approccio OOP, quindi preferirei non farlo.

  • Crea una classe per il conteggio delle auto. Non sono sicuro che sia anche questo specifica un caso per giustificare la propria classe.

  • Una classe di interfaccia di database per la tabella delle macchine. Esegui generale funzioni, conteggi, aggiornamenti cumulativi, ecc. Dovrebbe essere statico?

  • Una classe di controinterfaccia? Non sono molto chiaro su come costruirlo, è qualcosa che ho imparato leggendo sulle interfacce e il disaccoppiamento?

Questi sono i pensieri che ho avuto. Quali sono i modi suggeriti per gestirlo?

    
posta Peck3277 22.11.2016 - 12:14
fonte

1 risposta

4

Ci sono diversi modi per raggiungere il tuo obiettivo. Che intendi utilizzare dipende dalle tue preferenze e se hai un underlaying framework o CMS che utilizza un determinato modo. Nel caso in cui tu stia utilizzando un framework o simili, controlla le loro linee guida sulla codifica.

Nonostante ciò sono consapevole delle seguenti opzioni:

  • DBAL che fornisce functions come count($table) .
  • Model che fornisce functions come count . Inoltre il modello fornisce funzioni come get(id) e set(...$args)
  • Un RepositoryClass che supporta CRUD per il suo modello e il methods utilizzato per interagire con il database. Per ogni Model hai un RepositoryClass .
  • Un ListClass che puoi utilizzare con count() . Simile a RepositoryClass . Tuttavia, ListClass contiene effettivamente un elenco mentre RepositoryClass restituisce oggetti o e.g. la quantità di auto nel tuo database.

Preferisco l'utilizzo di ListClass e RepositoryClass . Nell'esempio seguente abbiamo un CarRepository con un metodo per recuperare tutte le marche disponibili. Il metodo findCarBrands restituisce la classe CarBrandList che contiene un elenco con modelli di tipo CarBrand . Poiché si tratta di un elenco, possiamo scorrere e accedere a ciascun marchio. Il CarBrand -Model ha un metodo per ottenere la quantità totale di auto disponibili per marca. Potresti chiederti dove è determinato il valore restituito di getTotalCars . Questo viene fatto nella classe repository quando iteriamo attraverso sql resultSet o sql statement itself .

<?php
     /** @var CarBrandList $carBrands*/
     $carBrands = $carRepository->findCarBrands();

     /** @var CarBrand $carBrand*/
     foreach ($carBrands as $carBrand)
     {
          echo $carBrand->getName() . ' | ' . $carBrand()->getTotalCars() . '<br/>';
     }
    
risposta data 22.11.2016 - 12:38
fonte

Leggi altre domande sui tag