È buona pratica OOP passare l'oggetto all'oggetto e avere più di un'istanza di classe?

2
  1. Singleton pattern che dice "non dovrebbe esserci più di un'istanza della stessa classe", è questo qualcosa che si dovrebbe tenere a quando si progettano applicazioni PHP OOP? Quali sono i vantaggi / gli svantaggi?

    class myDOMDocument {
    
       private $DOMDocument = new DOMDocument();
       private $HTML;
    
       public function __construct($html_str)  {
          $this->HTML = $html_str;
          $this->processHTML();
       }
    
       public function processHTML() {
           ...
       }
    }
    
    //instance 1
    $page_three_obj = new myDOMDocument ($html_one);
    //instance 2
    $page_three_obj = new myDOMDocument ($html_two);
    //instance 3
    $page_three_obj = new myDOMDocument ($html_three);
    
  2. Il passaggio dell'oggetto a un oggetto è una buona pratica in OOP rispetto al passaggio di dati tra due oggetti come argomenti del metodo pubblico? Quali sono i vantaggi / gli svantaggi di entrambi i modi?

Passaggio dell'oggetto a un oggetto

class one {
  public $myProperty;
  ...
}


$One = new one();

class two {
   private $Obj1;

   public function __construct(One $Obj1) {
      $this->$Obj1 = $Obj1;
   } 

   public function doSomething() {
      ... $this->$Obj1->myProperty ... 
   }
} 

$Two = new two($One);
$Two->doSomething();

vs passaggio di dati tra due oggetti

class one {
  public $myProperty;
  ...
}

$One = new one();

class two {

   public function doSomething($inputArg) {
      ... $inputArg ... 
   }

} 

$Two = new two();
$Two->doSomething($One->myProperty);
    
posta Bananas 13.11.2016 - 20:10
fonte

2 risposte

7
  1. Sembra che tu sia confuso. Il modello Singleton dice:

"if your application needs one and only one instance of a class, then implement it in a specific way"

e sicuramente non "non dovrebbe esserci più di un'istanza della stessa classe" (per ogni classe della tua applicazione). Quest'ultimo ha raramente senso per qualsiasi tipo di applicazione OO del mondo reale. Potrebbero esserci oggetti dai quali occorrono una dozzina, migliaia o milioni di istanze o oggetti per i quali solo un'istanza ha senso. In realtà dipende dal caso d'uso e dal tipo di astrazione che stai modellando con i tuoi oggetti.

Indipendentemente da questo, "Singleton" (come descritto sopra, non l'equivoco di esso) è un modello per cui molti sviluppatori al giorno d'oggi pensate che sia un anti-pattern , ma quest'ultimo non ha nulla a che fare con il vostro incomprensione iniziale.

  1. Se è meglio passare oggetti o dati quando si chiamano metodi di un altro oggetto dipende dal tipo di astrazione che si modella con gli oggetti e le funzioni. A volte è meglio passare alcuni attributi, a volte è meglio passare un intero oggetto, a volte è meglio usare gli oggetti helper e ci sono molte più varianti di questo. A questo non si può rispondere con nomi di classe come "uno" e "due" in modo ragionevole e generale. Forse questa precedente domanda su questo sito e le sue risposte potrebbero aiutarti un po '.
risposta data 13.11.2016 - 20:21
fonte
2

Il modello singleton non dice "non dovrebbe esserci più di un'istanza della stessa classe".

Il modello singleton dice "se non ci dovrebbero essere più di una istanza della stessa classe, ecco un modo per ottenerlo".

Il modello singleton non è una "best practice". È uno dei molti modi per controllare l'utilizzo di un oggetto.

Solo perché il modello esiste non significa che, per te, sarà una buona idea. Devi capirlo da solo.

    
risposta data 13.11.2016 - 20:30
fonte

Leggi altre domande sui tag