Logica ad Oggetti con PHP e MYSQL

Salve a tutti,

ho un piccolo quesito che penso sia venuto un po a tutti noi che ci avviciniamo alla programmazione

ad oggetti con php e mysql.

Qual'e' il modo piu giusto per implementare una gestione ..ad esempio..volendo creare un modulo news..

Potrei fare una classe news del tipo

class news{
    function add();
    function delete();
    function getField();
    function updateRead();
   ....
}

che interagisca con la tabella del db... che di per se e' abbastanza logico.

Il problema sorge quando vorrei pero' implementare qualcosa come mostraTutteLeNews() stampa ecc..

allora sarebbe piu logico fare un NewsMngr diciamo..

class News{
   private $title;
   private $testo;

   function save($title $autore);
   function selectNews($id);
   function elimina();
   ....
}

 class NewsMngr{
     function showAllNews();
     function saveNews($title,$autore);
     function selectNews($id);
     function deleteNews($id);
     .....
}

Quale sarebbe il metodo piu giusto? entrambi funzionano ma rimanendo nella logica corretta della programmazione ad oggetti...quale dei 2 dovrei usare??

inviato 9 anni fa
Ph03n1x
X 0 X

In teoria dovresti usare entrambi gli approcci:

un oggetto news per gestire la singola news ed un oggetto newsList per gestire un insieme di oggetti news.

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Oppure se vuoi complicarti (semplificarti) la vita puoi fare un oggetto News che gestisce la singola news (meglio se estende un oggetto comune), e un oggetto Collezione che è un insieme di oggetti News o altri ActiveRecord  (quindi astratto).

Per cercare i recordi ho visto varie soluzione, una di queste potrebbe essere aggiungere dei metodi statici alle classi giuste:

<?php

class News extends Record {
    function add();
    function delete();
    function getField();
    function updateRead();

    static function get();
    static function delete();
}
risposto 9 anni fa
GaretJax
X 0 X

Ovvero? non ho capito  :P

Inoltre volendo usare tutti e 2 gli approggi ovvero il mngr per gestire le news e l'oggetto news per le operazioni sulla singola news..l'operazione di salvataggio sarebbe propria di dell'oggetto news giusto?

E per l'eliminazione ? sarebbe una cosa tipo

class newsmngr {
   function delete($id_news){
      $news = new News();
      $news->delete($i);
   }
}

oppure una cosa come

class newsMngr {

  function delete($i)

  {

     //query al db

  }

}

quale dei 2 ?

Grazie mille per l'aiuto!! ;)

risposto 9 anni fa
Ph03n1x
X 0 X

Purtroppo l'approccio corretto dipende da moltissimi fattori che in questa sede è difficile affrontare. A seconda delle tue necessità dovresti decidere se deve essere il gestore delle news ad occuparsi di tutte le attività sulle news oppure se deve comportarsi semplicemente da contenitore di oggetti news che a loro volta effettuano le query sul DB.

Nel primo caso tutte le query le fa la classe newsmngr, nel secondo caso invece newsmngr si deve limitare a restituirti gli oggetti news con i quali poi gestire realmente le news.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Quindi ad esempio...

parlando di salvataggio...avro' una cosa simile

$news = new News; $news->save($titolo,$testo...);

Con la classe news che esegue la query ecc..

e NewsMngr magari si occupera' delle query piu generiche come mostrare tutte le news in tabella ecc..

tipo

$newsMng = new NewsMng(); $newsMng->displayMoreRead();

Cosi' potrebbe funzionare no?

O ancora per l'elimininazione di una news

$news = new News(); $news->deleteNews($idNews);

E' questo che mi piacerebbe capire...cioe' le funzioni di elimina, che richiedono un'id ad esempio...le dovrebbe fare il newsmngr o l'oggetto news?? il dubbio sorge in quanto all'oggetto news dovrei passargli un'id :(

Grazie ancora per l'aiuto e le delucidazioni ;)

risposto 9 anni fa
Ph03n1x
X 0 X

La cancellazione della news potrebbe essere fatta sia dal news managter, se a questa classe hai dato il compito di fare il "lavoro sporco" sul DB anche per le singole news.

$newsManager->delete(123);

Altrimenti se hai un oggetto news potresti implementare in esso direttamente la query di cancellazione della news stessa.

$unaNews = new news(123);

$unaNews->delete();

Entrambe le soluzioni sono valide.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ah perfetto ;)

Penso che faro' allora i metodi delete save dell'oggetto singola news,

mentre i restanti come visulizza, piulette per l'oggetto menager...che ne pensi, he sicuramente hai piu esperienza ?

Un'ultima cosa...poi ti lascio stare ;) ..ha senso richiamare nel menager..l'oggetto news singola ?

e la stampa che so ..della lista delle news ...secondo te va fatta dalla classe o dall'esterno?

Grazie Ancora ;)

 :bye:

risposto 9 anni fa
Ph03n1x
modificato 9 anni fa
X 0 X

Al manager potresti chiedere di restituirti un array di oggetti news e poi utilizzare i metodi di questi oggetti per compiere le varie operazioni. Oppure potresti farti avere dal manager un oggetto alla volta, con un iteratore (fai una ricerca a proposito). In pratica potresti usare il foreach o il while per scorrere tutti gli oggetti news contenuti dal gestore e applicare i vari metodi su essi.

Oppure potresti chiedere al manager di applicare i metodi direttamente su tutti gli oggetti che contiene.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

OK .. Grazie mille Gianni!!! ;)

risposto 9 anni fa
Ph03n1x
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda