2017-01-24 2 views
2

Je souhaite utiliser une architecuture propre dans une nouvelle application et jusqu'à présent cela fonctionne très bien. J'ai structuré l'application en 3 modules (présentation, données et domaine) comme dans l'exemple suivant: Android-CleanArchitectureModule de domaine Android CleanArchitecture et AutoValue

Il y a quelques entités dans mon module de domaine. L'un d'eux est l'utilisateur. Je souhaite utiliser AutoValue avec certaines extensions pour supprimer le code standard. L'une des extensions est AutoValue Parcel. Maintenant, j'ai besoin d'implémenter l'interface android.os.Parceable qui est une partie de android et ne peut pas être utilisé dans mon module de domaine, car il s'agit d'une dépendance Android.

Quelle est la bonne façon de l'implémenter?

+0

J'ai la même question, peut-être devrions-nous utiliser 'java.io.Serializable', mais je préfère utiliser une bibliothèque similaire à https://github.com/rharter/auto-value-parcel. –

+0

Oui mais je pense qu'à la fin il vaudra mieux faire du module de domaine une librairie android. – BauerMitFackel

+0

AFAIK, Domain Layer ne devrait pas avoir de dépendance Android, sinon le test sera difficile. –

Répondre

1

Remplir l'idéal de Clear Architecture est un peu difficile avec Android, car Android est un framework complet qui a ses propres spécifications, même au niveau de base de la langue.

Je pense, comme l'idéal des outils spécifiques niveau libre est la plupart du temps à des fins de test, donc - cela devrait être le but principal à l'esprit lorsqu'il s'agit d'Android. Considérons le Parcelable lui-même, considérez que c'est simplement ajouter des méthodes supplémentaires pour l'objet modèle afin de rendre Android OS capable de sérialiser/désérialiser les données entre les différents composants du système. Comme vos tests au niveau du domaine ne sont pas exécutés par Android OS, ils ne devraient pas toucher à ces méthodes et cela n'affecterait pas vos tests.

Tenir compte, plusieurs autres API dans Android qui ne sont pas disponibles dans le test de l'unité, comme Uri, DateUtils, SparseArray et plus ...
C'est là que je pense que Roboelectric peut venir à portée de main, avec moquant ces primitives Android.

Ceci étant dit ... avec l'architecture claire, votre niveau de domaine doit être séparé du niveau Présentation, donc en gros vous auriez des objets de modèle dans deux couches (qui peut partager l'interface) et les deux peuvent utiliser AutoValue , mais uniquement au niveau Présentation, vous pouvez implémenter l'interface Parcelable (qui en a besoin, car dans ce niveau, vous interagirez avec le système et utiliserez Parcel). Aucune dépendance d'Android au niveau du domaine n'est la seule considération pour cette séparation, gardez à l'esprit que le niveau Présentation peut ajouter des informations non pertinentes au niveau Domaine.

+0

Merci pour la clarification. J'ai donc besoin de mapper les entités de mon module de domaine (Java pur) aux entités de mon module de présentation (Android). Je suppose que le module de présentation est responsable de cela. – BauerMitFackel