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
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,4 @@
1
-
---
1
+
---
2
2
layout: post
3
3
title: Les libs Android de Square
4
4
author: johanpoirier
@@ -21,7 +21,7 @@ Nous allons donc voir quelque unes de ces librairies illustrées dans une petite
21
21
22
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.
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'objet. C'est cette classe qui s'occupera d'invoquer les constructeurse t 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é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).
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
@@ -66,14 +66,14 @@ public class DaggerModule {
66
66
}
67
67
{% endhighlight %}
68
68
69
-
Ce module est indispensable pour construire le graph d'objet :
69
+
Ce module est indispensable pour construire le graph d'objets :
70
70
71
71
{% highlight java %}
72
72
// graph construction from the module and its entry points
Grâce à ce graph d'objet, nous pouvons injecter les classes gérées par Dagger :
76
+
Grâce à ce graph d'objets, nous pouvons injecter les classes gérées par Dagger :
77
77
78
78
{% highlight java %}
79
79
// self inject
@@ -97,7 +97,7 @@ public abstract class DaggerActivity extends Activity {
97
97
}
98
98
{% endhighlight %}
99
99
100
-
Le module de mon application s'occupe de fournir les instances via des @Provides et sert de point d'entrée à toute mon application pour fournir le graph d'objet :
100
+
Le module de mon application s'occupe de fournir les instances via des @Provides et sert de point d'entrée à toute mon application pour fournir le graph d'objets :
101
101
102
102
{% highlight java %}
103
103
// the entry point is where the graph begins
@@ -138,7 +138,7 @@ Otto est un bus d'évènements permettant de découpler les différentes parties
138
138
139
139
### Le principe
140
140
141
-
Le principe est simple.
141
+
Il est extrêmement simple.
142
142
143
143
Pour publier un évènement, il faut poster un évènement sur le bus :
144
144
@@ -171,7 +171,7 @@ Pour ne plus recevoir les évènements, il suffit de se désenregistrer :
171
171
bus.unregister(this);
172
172
{% endhighlight %}
173
173
174
-
Enfin, il est possible de fournir une valeur dès l'enregistrement sur le bus via des @Produce. Cela peut permettre ainsi de fournir le dernier évènement publié sur le bus au client qui vient de s'enregistrer.
174
+
Enfin, il est possible de fournir une valeur dès l'enregistrement sur le bus via des @Produce. Cela peut permettre ainsi de fournir le dernier évènement publié sur le bus au client qui vient juste de s'enregistrer.
175
175
176
176
{% highlight java %}
177
177
// useful when you need to know what was going on before you listened
@@ -182,7 +182,7 @@ public AwesomeEvent produceAwesomeEvent() {
182
182
}
183
183
{% endhighlight %}
184
184
185
-
Les producteurs comme les clients souscripteurs doivent s'enregistrer sur le bus.
185
+
Les producteurs comme les clients souscripteurs doivent s'enregistrer auprès du bus.
186
186
187
187
188
188
### En pratique sur Android
@@ -238,7 +238,7 @@ public class MainActivity extends Activity {
238
238
239
239
@Subscribe
240
240
public void displayNetworks(final NetworksAvailableEvent event) {
241
-
// event is coming from the background, requestiing UI thread
241
+
// event is coming from the background, requesting UI thread
242
242
runOnUiThread(new Runnable() {
243
243
@Override
244
244
public void run() {
@@ -251,7 +251,7 @@ public class MainActivity extends Activity {
251
251
}
252
252
{% endhighlight %}
253
253
254
-
L'évènement NetworksAvailableEvent est produit par un BroadcastReceiver qui tourne en background :
254
+
L'évènement NetworksAvailableEvent est produit par un BroadcastReceiver qui tourne en background. C'est lui qui va poster des évènements sur le bus.
255
255
256
256
{% highlight java %}
257
257
// event post on the bus
@@ -284,7 +284,7 @@ public class WifiInfoReceiver extends DaggerBroadcastReceiver {
284
284
{% endhighlight %}
285
285
286
286
287
-
## [Retrofit](https://github.com/square/retrofit) : une interface REST
287
+
## [Retrofit](https://github.com/square/retrofit) : un client REST
288
288
289
289
Retrofit est un client REST pour Android, dans le même esprit que Spring Android [RestTemplate](http://static.springsource.org/spring-android/docs/1.0.x/reference/html/rest-template.html).
290
290
@@ -301,14 +301,14 @@ public interface Github {
301
301
@GET("orgs/square/repos")
302
302
List<Repo> getSquareRepos();
303
303
304
-
@GET("orgs/square")
305
-
Org getSquare();
304
+
@GET("orgs/square/repos/{id}")
305
+
Repo getSquareRepo(@Named("id") String id);
306
306
}
307
307
{% endhighlight %}
308
308
309
309
Les classes Repo et Org sont de simples POJOs qui ont les mêmes attributs (même partiellement) que ceux de l'API appelée.
310
310
311
-
Pour utliser mon interface, il nous faut utiliser un RestAdapater :
311
+
Pour utliser notre interface, il nous faut utiliser un RestAdapater :
312
312
313
313
{% highlight java %}
314
314
// the RestAdapter builder is nice
@@ -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 d'Android. 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é 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
-
Par ailleurs, [Pierre-Yves Ricau](https://github.com/pyricau), le créateur du projet AndroidAnnotations, a fourni un exemple d'intégration de Dagger, Otto et AndroidAnnotations sur Github : [CleanAndroidCode](https://github.com/pyricau/CleanAndroidCode).
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