1
votes

Code dupliqué MVVM dans plusieurs référentiels

J'ai plusieurs référentiels qui ont besoin d'informations d'identification pour travailler avec un service externe. Ces informations d'identification sont stockées dans les préférences partagées de mon application et je les charge avec succès dans chaque référentiel.

Pour spécifier ces informations d'identification sont utilisées dans la demande d'en-tête SOAP et elles sont fournies par l'utilisateur.

Avec la solution actuelle, je charge ces creds dans les activités, puis je les transmets au référentiel via une méthode dans les viewmodels. Cette approche génère beaucoup de code dupliqué, car pour chaque activité où j'ai besoin de ces crédits, je répète tout le processus.

Existe-t-il une meilleure solution qui suivra les meilleures pratiques MVVM et évitera le code en double?


1 commentaires

Extrayez le code dupliqué et fournissez-le en tant que dépendance. Vos informations d'identification pourraient facilement être extraites derrière une autre classe qui est réutilisée, de cette façon cette nouvelle classe a une seule responsabilité et résume la façon dont les informations d'identification sont fournies. Je ne suis pas fan des classes d'utils inutiles qui ont des méthodes static car cela rend les tests plus difficiles.


3 Réponses :


1
votes

Pouvez-vous fournir plus de contexte?

À mon avis, il n'y a pas de réponse générale sans en savoir plus sur votre candidature. Ces référentiels utilisent-ils le même service (par exemple, un service réseau?). Si tel est le cas, vous pouvez les ajouter en tant qu'intercepteur personnalisé.

Vous pouvez les injecter dans une couche d'abstraction derrière les référentiels.

Pourquoi stockez-vous les informations d'identification dans les préférences partagées? Sont-ils statiques (comme les clés d'API réseau que vous avez obtenues de l'API)? Si tel est le cas, vous pouvez les mettre par ex. dans gradle.properties et enregistrez-les en tant que champ BuildConfig


2 commentaires

J'ai essayé de réécrire une question qui est peut-être plus précise maintenant.


si vous utilisez OkHttpClient, je suggérerais d'utiliser un intercepteur ( square.github.io/okhttp/interceptors) Ensuite, c'est à vous, si vous utilisez l'injection de dépendances, d'injecter vos préférences partagées à l'Interceptor. Sinon, transmettez-le vous-même (une seule fois)



1
votes

Pour éviter le code redondant, une chose que vous pouvez faire est d'écrire ce code dans une classe utilitaire et de l'utiliser dans vos référentiels. J'espère que cela aide! :)


0 commentaires

1
votes

Vous pouvez écrire une classe POJO qui contiendra les informations d'identification. Dans votre activité principale, créez un objet avec les creds, puis envoyez simplement cet objet à travers l'application si nécessaire.


0 commentaires