Newsgroup: it.comp.www.php
Titolo: metodo passante?

interface AppInterface {
     function showHelp();
     function run();
}
 
final class BasicApp implements AppInterface {
     final public function showHelp() {
         echo "Questa applicazione blablabla... serve per blablabla...";
     }
 
     final public function run() {
         // ...
     }
}
 
final class AdvancedApp implements AppInterface {
     private $wrapped;
 
     final public function __construct(AppInterface $wrapped) {
         $this->wrapped = $wrapped;
     }
 
     final public function showHelp() {
         $this->wrapped->showHelp();
     }
 
     final public function run() {
         // fai qualcosa in più
         $this->wrapped->run();
         // fai qualcosa in più
     }
}
 
Avete notato una cosa?
Il metodo AdvancedApp::showHelp() è perfettamente inutile!!!
È stato implementato solo perchè lo richiede l'interfaccia AppInterface.
 
*DOMANDA*
 
Un metodo di questo tipo, quindi, come lo possiamo definire nel gergo 
della programmazione?
 
Metodo trasparente?
Metodo passante?
Metodo neutro?
Metodo nullo?
Metodo inerte?
Metodo formale?
Metodo apparente?
Metodo passante?
Metodo bypassante?

 È stato implementato solo perchè lo richiede l'interfaccia AppInterface.
 
 
1. In realtà è utile, mostra l'help:
2. Se l'interfaccia ti costringe a creare metodi vuoti, non come (showHelp), significa che l'hai progettata male.

 significa che l'hai progettata male.
 
In effetti potresti avere ragione.
 

 In effetti potresti avere ragione.
 
Se succede di aver assegnato più compiti ad una interfaccia (o a una classe astratta) si ha il problema delle funzioni vuote. In tal caso si devono individuare gli scopi e creare più interfacce.
Esempio astratto:
hai l'interfaccia CavoConSpina che comprende l'interruttore, questa va benissimo per LampadaDaTavolo, ma è inadatta per Frullatore, questo perché quell'interfaccia ha due scopi distinti. Dividendoli potrai creare
class LampadaDaTavolo implements CavoConSpina, InterruttorePassante
class Frullatore implements CavoConSpina

 che crei solo per onorare l'interfaccia.
 
Il menù?

Comunque per creare la documentazione ci vogliono certi strumenti che, 
di funzionare, non ne vogliono che sapere
 
phpdoc --directory src --target docs
PHP Fatal error:  Uncaught 
Doctrine\Common\Annotations\AnnotationException: [Semantical Error] The 
annotation "@JMS\Serializer\Annotation\Type" in property 
phpDocumentor\Configuration::$title does not exist, or could not be 
auto-loaded. in 
/tmp/tmp.1LouiU103a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php:54
Stack trace:
#0 
/tmp/tmp.1LouiU103a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(741): 
Doctrine\Common\Annotations\AnnotationException::semanticalError('The 
annotation ...')
#1 
/tmp/tmp.1LouiU103a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(663): 
Doctrine\Common\Annotations\DocParser->Annotation()
#2 
/tmp/tmp.1LouiU103a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(354): 
Doctrine\Common\Annotations\DocParser->Annotations()
#3 
/tmp/tmp.1LouiU103a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php(254): 
Doctrine\Common\Annotations\DocParser->parse('/**\n     * @var...', 'pr 
in 
/tmp/tmp.1LouiU103a/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php 
on line 54
 
Se c'è qualcuno bravo e capace...