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


Groups > it.comp.www.php > #22432

Re: Iniezione delle dipendenze vs Service Locator

From Alessandro Pellizzari <shuriken@amiran.it>
Newsgroups it.comp.www.php
Subject Re: Iniezione delle dipendenze vs Service Locator
Date 2018-12-17 10:51 +0000
Message-ID <g7pdejF4gg7U1@mid.individual.net> (permalink)
References <pv5eiq$57e$1@gioia.aioe.org> <g7ng9kFmd9cU1@mid.individual.net> <pv7kgr$1s4u$1@gioia.aioe.org>

Show all headers | View raw


On 17/12/2018 07:50, alex wrote:

> Il 16/12/18 18:28, Alessandro Pellizzari ha scritto:

>> Partiamo da una premessa: un SL implementato come nell'esempio è
>> pessimo,

> Perchè?

Perché mette in un calderone tutto.

In questo modo non sai che interfaccia implementa il servizio che ti 
viene tornato quando lo richiedi, e soprattutto non sai se c'è un 
servizio con quel nome, costringendoti a verificare ovunque se la 
chiamata a ->get(NomeServizio) ha tornato null, e a gestire l'errore 
ovunque usi il SL.

Se la confronti con il pezzo di codice che ho postato io, è chiaro che 
se un servizio non esiste, non hai il getter per quel servizio, e hai 
errore in compilazione, e se il getter esiste, il getter stesso può 
gestire l'errore in caso il servizio non venga istanziato.

>> Vantaggi:
>> 1- puoi avere strict typing
>> 2- l'editor sa che oggetto torni e può autocompletarti i metodi
>> 3- l'editor sa se il SL fornisce un service o meno
> 
> Cioè?

Vedi sopra: se la classe SL non fornisce il metodo getHouse l'editor può 
dirti che non esiste tramite semplice inspection. Ma l'editor, se chiami 
->get("house") non ha idea se il SL tornerà qualcosa, quindi non ti 
segnala l'errore in caso manchi.

>> Ora veniamo alla DI. La DI dà allo sviluppatore controllo totale su cosa
>> passare a un oggetto. Invece di istanziare un oggetto e passargli il SL,
>> gli passi direttamente le dipendenze. Lo svantaggio è che se istanzi un
>> oggetto in profondità nel codice devi passare le dipendenze attraverso
>> tutto l'albero.
> 
> Anche l`SL è una dipendenza che verrebbe passata allo stesso modo, o 
> sbaglio?

Può esserlo. Io preferisco essere esplicito e passarla con DI, ma 
potrebbe essere un singleton (o un borg, per i pignoli :P) e lo istanzi 
dove ti serve.

> Per non violare il principio di DI, gli istanziamenti non andrebbero 
> fatti solo in uno dei file principali (index.php, Controller.php, ecc.)?

Gli istanziamenti li fai o nel index.php (e poi li infili nel SL) o nel 
SL stesso. In questo modo hai tutto nello stesso posto. Nei controller 
chiedi al SL di darti l'istanza, e lui sa se deve dartene una già fatta 
o deve crearne una al volo.

Questo è uno dei modi. Non è detto che sia il migliore. Spero non sia il 
peggiore, visto che è quello che uso di solito. :D

Bye.

Back to it.comp.www.php | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-16 12:52 +0100
  Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-16 17:28 +0000
    Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-17 08:50 +0100
      Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-17 10:51 +0000
        Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-18 14:36 +0100
          Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-20 12:42 +0000
            Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-20 14:49 +0100
              Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-20 17:39 +0000
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-20 19:06 +0100
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-20 19:28 +0100
                Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-21 09:42 +0000
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-21 14:47 +0100
                Re: Iniezione delle dipendenze vs Service Locator fmassei@gmail.com - 2018-12-21 15:45 -0800
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-22 11:55 +0100
                Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-22 16:12 +0000
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-22 17:33 +0100
                Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-22 16:46 +0000
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-22 18:37 +0100
                Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-23 15:18 +0000
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-23 18:43 +0100
                Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-23 17:52 +0000
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-23 18:58 +0100
                Re: Iniezione delle dipendenze vs Service Locator fmassei@gmail.com - 2018-12-24 04:22 -0800
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-30 14:38 +0100
                Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-22 13:04 +0100
        Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-20 16:18 +0100
          Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-20 17:37 +0000
            Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-20 19:21 +0100
              Re: Iniezione delle dipendenze vs Service Locator alex <1j9448a02@lnx159sneakemail.com.invalid> - 2018-12-20 20:19 +0100
                Re: Iniezione delle dipendenze vs Service Locator Alessandro Pellizzari <shuriken@amiran.it> - 2018-12-21 09:45 +0000
  Re: Iniezione delle dipendenze vs Service Locator fmassei@gmail.com - 2018-12-16 18:46 -0800

csiph-web