Conseils, services, ingénierie en informatique. Mise en place de solutions technologiques, et support, pour les entreprises.

Note utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

 Pour créer des applications mobiles, on utilise des outils de développement, en voici quelques uns:

 

android kotlin vs java dagger2

 

Dagger sur android en 2018

 

Pour Ben Kay, débuter avec Dagger 2 sur Android peut être décourageant. Il y a beaucoup de conseils disponibles, mais la plupart sont trop compliqués, périmés, et cassent tout en essayant de faire une application modulaire. Ou vous pourriez avoir une implémentation existante, mais vous vous demandez comment vous pouvez réduire le boilerplate et tirer parti des fonctionnalités Dagger conçues spécifiquement pour Android. Dans cette présentation, nous verrons comment utiliser les nouvelles extensions Dagger Android et d'autres fonctionnalités avancées de Dagger 2 pour simplifier l'injection de dépendances et briser le couplage pour rendre les applications modulaires et testables.

 

 Dagger n'est pas nouveau, mais il y a eu beaucoup de changements depuis quelques temps. On peut l'intégrer facilement aux applications

 

Une question? Posez-la ici

Aide au développement d'applications

On parle d'injection de dépendances

On travaille avec des interfaces

C'est un framework qui utilise les injections

Heureusement, le code ennuyeux est généré automatiquement

On peut créer un binding : un type et dagger nous donne une instance de ce type

Il y a des components: dans un component, les bindings sont accessibles

On peut utiliser le design pattern @singleton

 

Ce composant est stand alone, il ne dépend pas d'autres.

Quand on crée cette interface de composant, on doit lui passer une instance du 1er composant.

 

Et Dagger sur Android? Chez Citymaper ils l'utilisent depuis quelques années.

Comment avez vous mis Dagger dans votre application Android?

Les types Android doivent être créés par des méthodes d'injection:

 

(application as Myapp).component.inject(this)

 

Pour créer un scope, on utilise un @Subcomponent

 

Dans le fragment, on appelle l'activity et on injecte le composant

 

Injector.obtain<MapActivityComponent>(this).inject(this)

 

On injecte des composants comme ca:

 

void inject(RouteActivity...)

 

On a une public interface implémentée au minimum

 

Les classes ne savent pas comment l'injection a lieu, le process est transparent

 

Les multi bindings

3 méthodes:

@Provides

@Intoset

méthode

 

Dans Dagger 2.10, on facilite l'injection

 

Rappel, dans une app, on a un service, puis une activity

 

@contrivutesAndroidInjector

 

On a un moule dagger qui nous retourne notre composant

On peut avoir un @Activitycode

 

On peut dire à Dagger de générer un autre composant sur le fragment

 

abstract fun restaurantsFragment()

 

Le plus facile c'est de faire nos classes qui étendent les classes de Dagger de base, il y en a 5.

 

DagerApplication

DaggerActivity

DaggerFragment

DaggerService

DaggerBroadcastReceiver

DaggerContentProvider

 

On peut écrire les subcomposants nous meme, pas besoin de demander à Android, ça fonctionne

 

Tout est déja implémenté dans Dagger pour deja commencer à travailler

 

AndroidInjection.inject(this);

Et voilà

 

Les sous composants:

@Module

LibraryModule

 

@Subcomponent

LibrarySubcomponent

 

implementation 'my.awesome.dependency:sdk:1.0.0'

Quand on expose ces classes dans le graphe Dagger et qu'on lance un build, on a une erreur. Ca plante, pourquoi?

erreur: class file not found...

 

@Component(dependencies =

modules=

 

L'équipe dagger réfléchit à compiler les sous composants dans des fichiers séparés. pour rendre la javac compilation plus rapide

 

Dagger recrute à Citymapper, si vous avez envie de travailler à Londres.

 

Liens:

Dagger:

https://github..com/google/dagger
 

  

Une question? Posez-la ici

Aide au développement d'applications 

 

Migration d'Autovalue vers Kotlin et les data classes

 

D'après Ricardo Lage, AutoValue est un outil fantastique fourni par Google pour créer des classes de valeur immuables en Java. Si vous effectuez une migration de votre application vers Kotlin, les data classes sont la façon de faire la plus pratique à utiliser pour conserver les mêmes uses cases. Il y a cependant des choses à prendre en compte. Voici une belle experience de migration d'un projet d'AutoValue à des data classes Kotlin, et comment les problèmes trouvés au fil du projet ont été résolus. Au niveau du build, nous pouvons parler des "pros" et des "cons"  de chaque technique au sujet de la temps pris par le build, de la taille du package apk, du nombre de méthodes, et du temps de sérialisation.

 

Qu'est-ce qy'Autovalue?

 

Imaginons une classe en java, une classe user, quand on l'instancie, on aura toujours les mêmes objets.

 

On peut la mettre en final pour empecher la modification

 

On ajoute un constructeur pour initialiser les champs et leur donner des valeurs

 

@Nullable

 

Voilà, avec la classe modiiée, on peut comparer les 2 utilisateurs. Ils auront des IDs différents

 

On peut implémenter Parcelable

public final class user implements parcelable

 

A la fin on a un grande classe qui fonctionne comme on veut pour avoir des utlisateurs uniques

 

On valide que les paramètres constructeurs ne sont pas nuls...

On ajjoute le ToString();

 

Autovalue arrive et on peut créer ces classes et les comparer plus facilement

 

Autovalue génère automatiquement ce qu'il faut

 

Pas de dépendance au runtime

 

l'API est indépendante , vive l'encapsulation

 

Il n'y a que très peu de perte de performance

 

On ajoute l'anotation @Autovalue et voila, c'est simple. Notre classe de 100 lignes fait maintenant 10 lignes

 

@Autovalue

public abstract class User {

 

}

 

Il y a des plugins

 

auto-value-with

auto-value-gson ...

 

public abstract class User implements Parcelable {

 

On a une classe générée par plugin

 

$$$AutoValue_User

$$AutoValue_User

$AutoValue_User

 

Pourquoi migrer en data classes?

Parce que si on migre en Kotlin on n'a pas le choix

 

Les data classes sont les réponses de Kotlin aux méthodes classes equals(), hashCode(), toString()

 

Data classes et les avantages sur AutoValue?

 

Build plus rapide...

 

Issues dans les plugins

 

@Parcelize plugin, c'est le support officiel de Parcelable pour Kotlin

 

C'est un plugin compiler. C'est complié en une passe

 

Gson: https://github.com/google/gson

 

Moshi: https://github.com/square/moshi


 

  

Une question? Posez-la ici

Aide au développement d'applications

 

 

Ce transcript reflète exclusivement l'opinion de ses auteurs et n’engage en aucune façon Consultingit

 

Voilà, j'espère que ça vous a plu. Vos commentaires/remarques sont les bienvenus

 

Ajouter un Commentaire

Ces commentaires reflète exclusivement l'opinion de leurs auteurs et n’engage en aucune façon Consultingit. L'icone à gauche du commentaire apparait si votre adresse email utilisée pour poster est la même que celle de votre compte gravatar: https://fr.gravatar.com Pour insérer une balise youtube: [youtube]IDENTIFIER[/youtube]

Code de sécurité
Rafraîchir