J'ai des problèmes avec l'architecture propre. Pour ceux d'entre vous qui ont lu l'article de blog de Fernando Cejas http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/, ma question est basée sur elle, et son code.Comment implémenter une ou plusieurs relations dans l'architecture propre
Son exemple de projet a un seul objet de domaine par utilisateur. Et tout est clair avec les POJO. Là où j'ai un problème, disons que l'utilisateur a des livres. Une relation de un à plusieurs. Comment aborderiez-vous cela dans Clean Architecture?
Tout comme lui j'ai quelques couches, donc 3 classes par objet de domaine (User, UserModel, UserEntity) et un référentiel par objet de domaine (UserDataRepository). Notre nouvel exemple aurait également Book, BookModel, BookEntity et BookDataRepository. J'ai également des classes de cas d'utilisation avec des variations CRUD.
Le problème pour moi est au niveau UI/Presenter. À ce stade du programme, j'ai un objet UserModel ET une liste de BookModels. Je n'ai pas userModel.getBooks(). Je n'ai pas userModel.save() (qui enregistrerait aussi tous les changements de livre).
Pour accentuer le problème, pour que cette analogie ressemble encore plus à mon cas d'utilisation réel, j'ai aussi la liste de toutes les pages dans les livres! :) Ainsi, lorsque je sauvegarde l'utilisateur, je veux sauvegarder dans les livres, et toutes les pages pour chaque livre qui aurait pu être modifié.
Comment procéder?
Deuxième question BONUS: Dans mon problème du monde réel, j'ai des classes qui dérivent d'une classe de base. Pour utiliser l'analogie ci-dessus: LeftPage et RightPage dériveraient de PageBase. Un livre a une liste. Cependant LeftPage et RightPage ont tous deux leurs dépôts séparés, leurs cas d'utilisation séparés, etc. (Mais cela ne fonctionne pas) Comment enregistrer une liste ?? Dois-je faire un SavePages de cas d'utilisation séparée qui aurait un:
si (pages.elementAt (i) instanceof LeftPage) { SaveLeftPage saveLeft = new ..... } else { SaveRightPage saveRight = nouveau ..... }
Je ne pense pas que je peux utiliser le polymorphisme parce que dans toute la documentation que j'ai vu, les modèles ne connaissent pas les cas d'utilisation.
J'espère que vous pouvez aider, je vous remercie beaucoup pour votre temps :)
-Mike
Merci pour votre réponse. Oui, je sais que c'est Oncle Bob's :) Je me réfère à la version de M. Cejas pour deux raisons a) Je fais une application Android et b) le texte ci-dessus est juste un edit d'une lettre que je lui ai envoyé . :) Les spécificités du cas d'utilisation n'ont pas d'importance, il existe de nombreux cas d'utilisation. Ce qui compte, ce sont les données. Par exemple, je peux obtenir un utilisateur du référentiel d'utilisateurs. Mais alors on s'attendrait à faire user.getBooks() (de manière synchrone). Puis, avec le livre retourné, book.getPage() (encore une fois, de manière synchrone). Quel est le design correct pour rendre cela possible? – MikeWallaceDev
Je ne sais pas si j'ai compris. Vous voulez quelque chose de similaire au chargement paresseux? Charger l'entité principale en premier et charger seulement les entités enfants à la demande (getBooks())? – jaimetotal
Non, j'essaie de comprendre la bonne façon de reconstruire cette arborescence. Tous les documents/exemples fonctionnent avec de simples POJO. Et je le comprends. Mais rien ne montre comment travailler avec des objets qui sont parents-> enfants. En utilisant la connaissance de la documentation, j'aurais un objet Utilisateur et * à côté * un autre objet de la liste de types. Je ne sais pas comment créer correctement un objet Utilisateur qui a un enfant de la liste . –
MikeWallaceDev