Où dois-je mettre les méthodes qui font une demande Http pour obtenir des données d'un service Web dans le développement iOS?


9

J'ai une voiture modèle dans mon application iOS où ses paramètres comme le nom, l'année, la valeur, etc. sont récupérés à partir d'un service Web afin de remplir une liste de données sur les voitures.

Où dois-je mettre la méthode qui va de manière asynchrone au serveur et renvoie un tableau de voitures (cette méthode convertit déjà le JSON en tableau de voitures)?

Mon approche actuelle est une méthode statique dans ma classe Car qui reçoit un HttpClient (donc je suis capable de le tester unitaire en se moquant du client) et retourne un NSArray de voitures, est-ce bien?

Qu'avez-vous fait dans cette situation?

Je suis inquiet parce que j'ai récemment commencé à lire du code propre qui dit qu'une classe ne devrait faire qu'une seule chose, et la façon dont je l'ai maintenant semble faire 2 choses (conserver des informations sur une voiture et obtenir une liste de voitures).

Réponses:


4

Je recommanderais un objet CarBroker qui gère les demandes de voitures et expose des méthodes comme:

  1. getCars - pour obtenir une liste de toutes les voitures.
  2. getCarByID - pour une voiture spécifique.

En outre, un tel objet peut gérer la demande d'autres courtiers automobiles (si nécessaire). Quoi qu'il en soit, il a un véritable domaine de responsabilité - le courtage de voitures - au lieu d'être un objet de voiture avec les responsabilités d'un objet de voiture et d'un courtier d'objet.


Cela sonne bien car vous avez maintenant un objet Car propre qui peut être réutilisé. Et si vous commencez à utiliser un autre protocole d'accès pour obtenir des données? Dans ce scénario, vous avez quelque part pour commencer, vous savez que tout ce que vous traitez \ code \ code logique d'un côté accepte les objets Car. Ensuite, vous pouvez commencer à réimplémenter le CarBroker en utilisant REST ou autre chose, mais vous êtes déjà à mi-chemin et vous n'avez pas à reprogrammer et retester la logique qui n'est intrinsèquement liée qu'à une abstraction de voiture .
Andyz Smith

1

Ici, la conservation d'un autre objet doit être conservée quelque part, ce qui ne peut garantir que le parent sera toujours en vie pour traiter la réponse.

Je suggère de conserver ces implémentations dans une classe singleton. Garder cette classe sera également utile pour une implémentation de méthode générique qui peut être appelée très souvent.


-1

Vous pouvez appeler la méthode asynchrone à l'intérieur de la méthode ViewDidLoad lorsque le tableau revient du Web, actualisez la vue.Vous pouvez enregistrer le tableau dans la base de données, vous n'aurez donc pas besoin de charger les données du Web à chaque chargement du Viewcontroller.


3
comment cela répond-il à la question posée?
moucher
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.