You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/2012-11-29-square-libs.markdown
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,13 +19,13 @@ Nous allons donc voir quelque unes de ces librairies illustrées dans une petite
19
19
20
20
## [Dagger](http://square.github.com/dagger/) : l'injection de dépendance
21
21
22
-
Dagger se veut comme un successeur de Guice dont le créateur [Bob Lee](https://twitter.com/crazybob) est justement le CTO de Square. Il a voulu créer un framework d'injection de dépendances rapide et moderne qui fonctionne aussi bien en java "classique" que sur Android avec sa JVM Dalvik adapté au mobile.
22
+
Dagger se veut être le successeur de Guice dont le créateur [Bob Lee](https://twitter.com/crazybob) est justement le CTO de Square. Il a voulu créer un framework d'injection de dépendances rapide et moderne qui fonctionne aussi bien en java "classique" que sur Android avec sa JVM Dalvik adapté au mobile.
23
23
24
-
A l'instar d'[AndroidAnnotations](http://androidannotations.org/), Dagger s'appuie sur la génération de code à la compilation (JSR 269 : Annotation Processing). Pour chaque classe gérée par Dagger, une classe est créee contenant toute la logique d'injection en se basant sur le graph d'objets. C'est cette classe qui s'occupera d'invoquer les constructeurs et injecter les variables annotées en @Inject (JSR 330).
24
+
A l'instar d'[AndroidAnnotations](http://androidannotations.org/), Dagger s'appuie sur la génération de code à la compilation (JSR 269 : Annotation Processing). Pour chaque classe gérée par Dagger, une classe est créée contenant toute la logique d'injection en se basant sur le graph d'objets. C'est cette classe qui s'occupera d'invoquer les constructeurs et d'injecter les variables annotées en @Inject (JSR 330).
25
25
26
26
Dagger se passe donc de tout usage de réflexion contrairement à Guice (et sa version pour Android : RoboGuice). Et ceci est une bonne chose pour nos applications Android car le principal défaut de Guice était bien le temps de construire le graph au démarrage de l'application.
27
27
28
-
Place à l'illustration de la librairie par un peu de code :
28
+
Place à l'illustration de la librairie par un peu de code pour Android :
29
29
30
30
### Les principes
31
31
@@ -89,7 +89,7 @@ Pour éviter d'appeler l'ObjectGraph pour injecter mes activités dans le onCrea
89
89
{% highlight java %}
90
90
// Parent of all activities
91
91
public abstract class DaggerActivity extends Activity {
@@ -105,7 +105,7 @@ Le module de mon application s'occupe de fournir les instances via des @Provides
105
105
public class DaggerModule {
106
106
107
107
private static ObjectGraph graph;
108
-
108
+
109
109
@Provides
110
110
@Singleton
111
111
public MyService provideUserService() {
@@ -129,7 +129,7 @@ public class DaggerModule {
129
129
}
130
130
{% endhighlight %}
131
131
132
-
J'ai réalisé une petit application de test disponible sur Github : [squarelibs-android-demo](https://github.com/johanpoirier/squarelibs-android-demo). Au lancement de l'application, c'est immédiat, pas de temps de création du graph décelable par l'utilisateur.
132
+
J'ai réalisé une petite application de test disponible sur Github : [squarelibs-android-demo](https://github.com/johanpoirier/squarelibs-android-demo). Au lancement de l'application, c'est immédiat, pas de temps de création du graph décelable par l'utilisateur.
133
133
134
134
135
135
## [Otto](http://square.github.com/otto/) : le bus d'évènements
@@ -140,7 +140,7 @@ Otto est un bus d'évènements permettant de découpler les différentes parties
140
140
141
141
Il est extrêmement simple.
142
142
143
-
Pour publier un évènement, il faut poster un évènement sur le bus :
143
+
Pour publier un évènement, il suffit de poster un évènement sur le bus :
144
144
145
145
{% highlight java %}
146
146
// AwesomeEvent could be anything
@@ -262,14 +262,14 @@ public class WifiInfoReceiver extends DaggerBroadcastReceiver {
262
262
263
263
@Inject
264
264
protected Bus bus;
265
-
265
+
266
266
@Override
267
267
public void onReceive(Context context, Intent intent) {
// scan results available : post event to the bus to display on the main activity
274
274
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
275
275
scanResults = wifiManager.getScanResults();
@@ -356,11 +356,11 @@ public class DaggerModule {
356
356
}
357
357
{% endhighlight %}
358
358
359
-
Nous utilisons Gson comme librairie de sérialisation/désérialisation et le client HTTP par défaut d'Android. A ce propos, Square propose une autre librairie nommée [OkHttp](https://github.com/square/okhttp) qui est un client HTTP+SPDY pour Android. OkHttp permet de pouvoir compter sur le même client http sur toutes les versions d'Android et ne pas dépendre de la version de celui-ci. Il faudrait le tester et surtout attendre une version plus finalisée.
359
+
Nous utilisons Gson comme librairie de sérialisation/désérialisation et le client HTTP par défaut d'Android. A ce propos, Square propose une autre librairie nommée [OkHttp](https://github.com/square/okhttp) qui est un client HTTP+SPDY pour Android. OkHttp permet de pouvoir compter sur le même client HTTP sur toutes les versions d'Android et ne pas dépendre de la version de celui-ci. Il faudrait le tester et surtout attendre une version plus finalisée.
360
360
361
361
362
362
## Conclusion
363
363
364
-
Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensé pour. Elles fonctionnent parfaitement ensemble mais si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application Android.
364
+
Dagger, Otto et Retrofit sont de petites librairies, encore jeunes mais très prometteuses. Elles sont parfaitement adpatées à un contexte d'utilisation mobile car elles ont été pensées pour. Elles fonctionnent parfaitement ensemble mais si vous ne devez en retenir qu'une, je vous conseille Otto qui est un merveilleux petit outil pour découpler les composants de votre application Android.
365
365
366
366
Pour rappel, ces 3 librairies sont illustrées dans une application Android sur Github : [squarelibs-android-demo](https://github.com/johanpoirier/squarelibs-android-demo). Dans le même registre, [Pierre-Yves Ricau](https://github.com/pyricau) a fourni un exemple d'intégration de Dagger, Otto et AndroidAnnotations sur Github : [CleanAndroidCode](https://github.com/pyricau/CleanAndroidCode).
0 commit comments