Panoramica su Dagger2 e i suoi componenti.
Presentazione utilizzata durante il codelab "Sviluppare un'app Android utilizzando il pattern MVP, Dagger2 e RxJava" tenuto in occasione della conferenza GDG Bari Devfest 2016 presso il Politecnico di Bari.
Dependency injection questa sconosciutaAndrea Dottor
L'uscita di ASP.NET Core ha portato a una maggiore diffusione dell'utilizzo della DI (Dependency Injection) ma spesso senza che lo sviluppatore sappia la sua reale utilità o potenzialità.
Dependency Injection, uno dei design pattern della programmazione OOP. Una best-practice dello sviluppo che può portare alla semplificazione del codice scritto, facilitare il disacoppiamento, e migliorare la testabilità.
In questa sessione vedremo cos'è la DI e come utilizzarla intelligentemente all'interno dei nostri progetti.
Slide dell'evento "XE One Day - Good code" tenuto il 15.09.2018.
Il codice è disponibile alla pagina dell'evento https://www.xedotnet.org/eventi/one-day-good-code/
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
Il pattern architetturale MVC (Model View Controller) favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l'impiego dei più diffusi pattern di software engineering, il controllo completo dell'HTML generato e degli URL, la testabilità ed estendibilità.
In questa sessione vedremo le novità principali di Asp.Net MVC in versione 3.
La sessione è stata tenuta a SMAU Business Bologna il 9 giugno 2011
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
Nicola e Davide vi guideranno in uno spericolato refactoring di un codice poco gradevole alla vista di qualsiasi buon programmatore con lo scopo di illustrare i principali problemi che normalmente affligono il nostro povero codice rendendo difficile la scrittura di fantastici e utili test unitari. Verranno spiegati i principi da rispettare per ottenere un codice facile da testare quali: dependency injection, law of demeter, uso del pattern factory e builder, corretta scrittura dei costruttori, come scovare nomi pericolosi. Ed illustrate le pratiche da evitare: pattern singleton, stati globali, service locator, scrittura di classi con troppa responsabilità. Alla fine del talk verranno presentati alcuni link, software e libri utili nella scrittura di test unitari.
This presentation talks about behavioural design patterns. In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication. In particular in the slides are described the following patterns:
- Command
- Iterator
- Observer
- Strategy
- Template Method
Design patterns are presented using examples in Java, Scala and Javascript.
The presentation is took from the Software Engineering course I run in the bachelor-level informatics curriculum at the University of Padova.
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Quando, come e perché utilizzare PowerMock. Vengono analizzati i legami tra design delle applicazioni e strumenti di test. Sono presenti esempi di codice semplice ma verosimile con i rispettivi test.
Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
Dependency injection questa sconosciutaAndrea Dottor
L'uscita di ASP.NET Core ha portato a una maggiore diffusione dell'utilizzo della DI (Dependency Injection) ma spesso senza che lo sviluppatore sappia la sua reale utilità o potenzialità.
Dependency Injection, uno dei design pattern della programmazione OOP. Una best-practice dello sviluppo che può portare alla semplificazione del codice scritto, facilitare il disacoppiamento, e migliorare la testabilità.
In questa sessione vedremo cos'è la DI e come utilizzarla intelligentemente all'interno dei nostri progetti.
Slide dell'evento "XE One Day - Good code" tenuto il 15.09.2018.
Il codice è disponibile alla pagina dell'evento https://www.xedotnet.org/eventi/one-day-good-code/
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
Il pattern architetturale MVC (Model View Controller) favorisce la manutenzione delle applicazioni web tramite una architettura elegante ed una chiara ed esplicita separazione delle competenze, l'impiego dei più diffusi pattern di software engineering, il controllo completo dell'HTML generato e degli URL, la testabilità ed estendibilità.
In questa sessione vedremo le novità principali di Asp.Net MVC in versione 3.
La sessione è stata tenuta a SMAU Business Bologna il 9 giugno 2011
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
Nicola e Davide vi guideranno in uno spericolato refactoring di un codice poco gradevole alla vista di qualsiasi buon programmatore con lo scopo di illustrare i principali problemi che normalmente affligono il nostro povero codice rendendo difficile la scrittura di fantastici e utili test unitari. Verranno spiegati i principi da rispettare per ottenere un codice facile da testare quali: dependency injection, law of demeter, uso del pattern factory e builder, corretta scrittura dei costruttori, come scovare nomi pericolosi. Ed illustrate le pratiche da evitare: pattern singleton, stati globali, service locator, scrittura di classi con troppa responsabilità. Alla fine del talk verranno presentati alcuni link, software e libri utili nella scrittura di test unitari.
This presentation talks about behavioural design patterns. In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication. In particular in the slides are described the following patterns:
- Command
- Iterator
- Observer
- Strategy
- Template Method
Design patterns are presented using examples in Java, Scala and Javascript.
The presentation is took from the Software Engineering course I run in the bachelor-level informatics curriculum at the University of Padova.
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Quando, come e perché utilizzare PowerMock. Vengono analizzati i legami tra design delle applicazioni e strumenti di test. Sono presenti esempi di codice semplice ma verosimile con i rispettivi test.
Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
3. Cos’è?
“ Dagger è un framework del tutto statico e a compile time di
dependency injection Java e Android.
Precedentemente sviluppato da Square, è adesso
manutenuto da Google. ”
[ google.github.io/dagger ]
4. Dependency Injection
Dependency injection (DI) è un design pattern della
Programmazione orientata agli oggetti il cui scopo è quello di
semplificare lo sviluppo e migliorare la testabilità di software di
grandi dimensioni.
[ Wikipedia ]
La Dependancy injection è un’implementazione della
“inversione del controllo”, ovvero il concetto per il quale un
componente riceve il controllo da un altro componente esterno
appartenente ad una libreria riutilizzabile, ribaltando di fatto il
concetto tradizionale della programmazione procedurale dove
è il componente attivo a chiamare procedure esterne.
5. Dependency Injection - Esempio
class LoginActivity extends Activity {
private AuthManager authManager;
onCreate(...) {
authManager = new AuthManager(...);
}
onLoginClick() {
authManager.doLogin();
}
Tradizionale: senza DI
class LoginActivity extends Activity {
@Inject
private AuthManager authManager;
onCreate(...) {
}
onLoginClick() {
authManager.doLogin();
}
Dagger2: con DI
6. Dagger API
@Module & @Provides Forniscono dipendenze
@Inject Richiede dipendenze
@Component Ponte tra moduli e inject
7. Fornire Dipendenze
I Moduli sono classi i quali metodi forniscono dipendenze:
@Module sulla classe
@Provides su ogni metodo
8. Esempio @Module + @Provides
public class NetworkModule {
OkHttpClient provideOkHttpClient() {
return new OkHttpClient();
}
TwitterApi provideTwitterApi(OkHttpClient client) {
return new TwitterApi(client);
}
}
@Module
@Provides
@Provides
@Singleton
@Singleton
9. Constructor Injection
@Inject su un singolo costruttore (all’interno della classe)
I parametri del costruttore sono dipendenze
Le dipendenze possono essere memorizzate
in campi final e private
10. Esempio - Constructor Injection
public class TwitterApplication {
private final Tweeter tweeter;
private final Timeline timeline;
@Inject
public TwitterApplication(Tweeter tweeter, Timeline timeline)
{
this.tweeter = tweeter;
this.timeline = timeline;
}
// …
11. Field Injection
@Inject sugli attributi che sono dipendenze della classe
Gli attributi non devono essere di tipo private o final
12. Esempio - Field Injection
public class TwitterActivity extends Activity {
@Inject Tweeter tweeter;
@Inject Timeline timeline;
// …
}
13. Field Injection
@Inject sugli attributi che sono dipendenze della classe
Gli attributi non devono essere di tipo private o final
L’Injection si verifica solo quando l’oggetto
è completamente istanziato