Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #20447 > unrolled thread

wrapper o decoratore

Started byalex <1j9448a02@lnx159sneakemail.com.invalid>
First post2016-03-05 09:55 +0100
Last post2016-03-05 06:15 -0800
Articles 13 — 4 participants

Back to article view | Back to it.comp.www.php


Contents

  wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-05 09:55 +0100
    Re: wrapper o decoratore Andrea D'Amore <anddam+NOSPAM@brapi.net> - 2016-03-05 13:41 +0100
      Re: wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-05 14:17 +0100
        Re: wrapper o decoratore Alessandro Pellizzari <shuriken@amiran.it> - 2016-03-05 13:30 +0000
          Re: wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-05 14:56 +0100
            Re: wrapper o decoratore Alessandro Pellizzari <shuriken@amiran.it> - 2016-03-05 14:18 +0000
              Re: wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-05 15:44 +0100
                Re: wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-05 15:58 +0100
                Re: wrapper o decoratore Alessandro Pellizzari <shuriken@amiran.it> - 2016-03-05 15:20 +0000
                  Re: wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-05 16:42 +0100
                    Re: wrapper o decoratore Alessandro Pellizzari <shuriken@amiran.it> - 2016-03-07 10:20 +0000
                      Re: wrapper o decoratore alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-03-07 17:35 +0100
    Re: wrapper o decoratore fmassei@gmail.com - 2016-03-05 06:15 -0800

#20447 — wrapper o decoratore

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-05 09:55 +0100
Subjectwrapper o decoratore
Message-ID<nbe6uj$ggc$1@gioia.aioe.org>
Differenza?
Un wrapper secondo me non modifica il wrapped (il valore in esso 
contenuto), ma al massimo esegue dei controlli per controllarne la 
validità, ed in caso contrario genera delle apposite eccezioni.
Poi invece un decoratore è anch'esso un wrapper, che però può modicare 
il wrapped aggiungendo delle decorazioni, ad es.:

$wrapped = '<b>'.$wrapped.'</b>';
parent::__construct($wrapped);

Cosa ne pensate delle definizioni che ho esposto?

[toc] | [next] | [standalone]


#20448

FromAndrea D'Amore <anddam+NOSPAM@brapi.net>
Date2016-03-05 13:41 +0100
Message-ID<nbek63$di9$1@virtdiesel.mng.cu.mi.it>
In reply to#20447
On 2016-03-05 08:55:57 +0000, alex said:

> Cosa ne pensate delle definizioni che ho esposto?

Stai compilando il Novissimo Melzi dell'Informatica?

-- 
Andrea

[toc] | [prev] | [next] | [standalone]


#20449

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-05 14:17 +0100
Message-ID<nbem8i$19mq$1@gioia.aioe.org>
In reply to#20448
Il 05/03/2016 13:41, Andrea D'Amore ha scritto:
> On 2016-03-05 08:55:57 +0000, alex said:
>
>> Cosa ne pensate delle definizioni che ho esposto?
>
> Stai compilando il Novissimo Melzi dell'Informatica?
>

Affermazione di carattere forse un po' troppo enfatizzante :)
Con tutto il rispetto per Giovanni Battista, direi che forse non sono 
l'unico a pormi la domanda
http://forums.codeguru.com/showthread.php?411166-wrapper-vs-decorator

[toc] | [prev] | [next] | [standalone]


#20450

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2016-03-05 13:30 +0000
Message-ID<dk05bpFu5kcU1@mid.individual.net>
In reply to#20449
Il Sat, 05 Mar 2016 14:17:09 +0100, alex ha scritto:

> Con tutto il rispetto per Giovanni Battista, direi che forse non sono
> l'unico a pormi la domanda
> http://forums.codeguru.com/showthread.php?411166-wrapper-vs-decorator

Pare che nessuno sia d'accordo sulla definizione di decorator, wrapper e 
adapter. Forse dipende dal linguaggio o dal background di chi ne parla.

Per quanto mi riguarda, un decorator è un wrapper che non modifica 
l'interfaccia dell'oggetto wrappato, mentre un adapter è un wrapper che 
implementa un'interfaccia diversa per l'oggetto wrappato.

Bye.

[toc] | [prev] | [next] | [standalone]


#20451

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-05 14:56 +0100
Message-ID<nbeohh$1d6j$1@gioia.aioe.org>
In reply to#20450
Il 05/03/2016 14:30, Alessandro Pellizzari ha scritto:
> Per quanto mi riguarda, un decorator è un wrapper che non modifica
> l'interfaccia dell'oggetto wrappato,

Quindi se ad es. esegue solo dei controlli del tipo
if (is_null($wrapped)) throw new ...
senza decorare niente di niente, è comunque da considerare un decoratore 
(che non decora)?

[toc] | [prev] | [next] | [standalone]


#20453

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2016-03-05 14:18 +0000
Message-ID<dk084rFu5kcU2@mid.individual.net>
In reply to#20451
Il Sat, 05 Mar 2016 14:56:08 +0100, alex ha scritto:

> Quindi se ad es. esegue solo dei controlli del tipo if
> (is_null($wrapped)) throw new ...

Un decoratore non dovrebbe mai wrappare null (così come un adapter), 
quindi questo tipo di controllo non ha senso.

Se intendevi altri controlli, fai un esempio.

Bye.

[toc] | [prev] | [next] | [standalone]


#20454

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-05 15:44 +0100
Message-ID<nberba$1ho2$1@gioia.aioe.org>
In reply to#20453
Il 05/03/2016 15:18, Alessandro Pellizzari ha scritto:
> Il Sat, 05 Mar 2016 14:56:08 +0100, alex ha scritto:
>
>> Quindi se ad es. esegue solo dei controlli del tipo if
>> (is_null($wrapped)) throw new ...
>
> Un decoratore non dovrebbe mai wrappare null (così come un adapter),
> quindi questo tipo di controllo non ha senso.
>
> Se intendevi altri controlli, fai un esempio.
>
> Bye.
>

class ValidString {
    function __construct($wrapped) {
        if (is_null($wrapped)) throw new ...;
        $this->wrapped = $wrapped;
    }
}

E' stata applicata qualche decorazione, quindi ha senso parlare di 
decoratore?
Oppure è stato fatto ***soltanto*** un checking?

[toc] | [prev] | [next] | [standalone]


#20455

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-05 15:58 +0100
Message-ID<nbes5g$1j83$1@gioia.aioe.org>
In reply to#20454
Il 05/03/2016 15:44, alex ha scritto:
>
> class ValidString {
>     function __construct($wrapped) {
>         if (is_null($wrapped)) throw new ...;
>         $this->wrapped = $wrapped;
>     }
> }
>
> E' stata applicata qualche decorazione, quindi ha senso parlare di
> decoratore?
> Oppure è stato fatto ***soltanto*** un checking?

Anche se in effetti...
è stata applicata una decorazione funzionale (alla classe), pur 
lasciando immutato il contenuto (wrapped).

[toc] | [prev] | [next] | [standalone]


#20456

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2016-03-05 15:20 +0000
Message-ID<dk0bqoFu5kcU3@mid.individual.net>
In reply to#20454
Il Sat, 05 Mar 2016 15:44:02 +0100, alex ha scritto:

> class ValidString {
>     function __construct($wrapped) {

function __construct(BaseString $wrapped) {

In questo modo non puoi passare null (ti dà errore in fase di compilazione 
del file) e forzi il tipo base (che è quello che deve fare un decoratore).

Se passi il tipo sbagliato, ti dà errore in fase di esecuzione.

Bye.

[toc] | [prev] | [next] | [standalone]


#20457

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-05 16:42 +0100
Message-ID<nbeuoe$1nfk$1@gioia.aioe.org>
In reply to#20456
Il 05/03/2016 16:20, Alessandro Pellizzari ha scritto:
> Il Sat, 05 Mar 2016 15:44:02 +0100, alex ha scritto:
>
>> class ValidString {
>>      function __construct($wrapped) {
>
> function __construct(BaseString $wrapped) {
>
> In questo modo non puoi passare null (ti dà errore in fase di compilazione
> del file) e forzi il tipo base (che è quello che deve fare un decoratore).
>
> Se passi il tipo sbagliato, ti dà errore in fase di esecuzione.
>
> Bye.
>

Ovvio.
Quindi alla fine possiamo dire che **wrapper** è un appellativo 
piuttosto generico, che può indicare un decorator o un adapter?

[toc] | [prev] | [next] | [standalone]


#20462

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2016-03-07 10:20 +0000
Message-ID<dk52ujF7nh5U2@mid.individual.net>
In reply to#20457
On 05/03/2016 15:42, alex wrote:

> Quindi alla fine possiamo dire che **wrapper** è un appellativo
> piuttosto generico, che può indicare un decorator o un adapter?

E anche altre cose, volendo, tipo Proxy e forse anche Facade.

Bye.

[toc] | [prev] | [next] | [standalone]


#20467

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-03-07 17:35 +0100
Message-ID<nbkajv$1l4a$1@gioia.aioe.org>
In reply to#20462
Il 07/03/2016 11:20, Alessandro Pellizzari ha scritto:
> On 05/03/2016 15:42, alex wrote:
>
>> Quindi alla fine possiamo dire che **wrapper** è un appellativo
>> piuttosto generico, che può indicare un decorator o un adapter?
>
> E anche altre cose, volendo, tipo Proxy e forse anche Facade.
>
> Bye.
>

Facade, cioè ad esempio un Helper?

[toc] | [prev] | [next] | [standalone]


#20452

Fromfmassei@gmail.com
Date2016-03-05 06:15 -0800
Message-ID<a4bfb1f2-01a0-426a-94f2-54a4c4f7a5ef@googlegroups.com>
In reply to#20447
On Saturday, March 5, 2016 at 3:55:50 AM UTC-5, alex wrote:
> Differenza?
> Un wrapper secondo me non modifica il wrapped (il valore in esso 
> contenuto), ma al massimo esegue dei controlli per controllarne la 
> validità, ed in caso contrario genera delle apposite eccezioni.
> Poi invece un decoratore è anch'esso un wrapper, che però può modicare 
> il wrapped aggiungendo delle decorazioni, ad es.:
> 
> $wrapped = '<b>'.$wrapped.'</b>';
> parent::__construct($wrapped);
> 
> Cosa ne pensate delle definizioni che ho esposto?
>

Non direi...

Spesso la confusione nasce dal fatto che sia il decorator pattern che lo
adapter pattern sono chiamati a volte "wrapper pattern", per motivi a me
ignoti.

Oltre a quello che ha già scritto Alessandro, aggiungerei che dipende anche
dal concetto che deve esprimere, lo dicono i nomi stessi:

wrapper: impacchetta una classe o libreria attorno a un layer extra. Lo puoi
fare per qualsiasi motivo, tipo isolare componenti o librerie, o solo perché
non ti piacciono i nomi di funzioni o metodi :)
decorator: aggiunge funzionalità ad un componente. Lo usi per estendere una
classe a runtime senza modificare la classe stessa.
adapter: permette di usare un interfaccia al posto di un'altra. Lo usi per
far lavorare insieme più classi che non erano state disegnate per farlo,
senza modificarle.

Ciao!

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.www.php


csiph-web