Accès object modèle

samirsamir Membre
mars 2015 modifié dans API UIKit #1

Hello,


 


J'ai un souci au niveau architecture. Voici mes classes concernées :



@interface SGCustomerInfos : NSObject

@property (nonatomic, copy) NSString *name ;
...
@end

J'ai un data controller :



@interface SGDataController : NSObject

- (void)fetchCustomerInfosWithCompletion(void (^)(SGCustomerInfos  *customerInfos, NSString  *errorMessage))completion ;

@end

Fonctionnement :


 


Il fait appel à  une classe responsable du cache mémoire, s'il trouve l'objet customer infos il le renvoie directement, sinon il fait une requete réseaux pour le récupérer.


 


Le problème maintenant est que je dois accéder à  mon objet customerInfos un peu partout dans l'application. (7 ou 8 écrans, généralement c'est juste pour afficher le nom de client).


 


J'ai les solutions suivantes :


 


  1. Dans chaque contrôleur je demande à  mon data contrôleur de faire un fetch et de me renvoyer l'objet customerInfos. C'est une bonne solution je trouve (comme y a le système du cache) mais le problème y aura trop de répétition de code.

 


  1. récupérer une fois l'objet et le passer d'un contrôleur à  l'autre (à  l'initialisation ou en propriété). Le problème avec cette solution c'est que y a des contrôleurs intermédiaires auxquels je dois passer l'objet customerInfos ( dont ils ont pas besoin) pour le passer à  leur tour au prochain contrôleur et ainsi de suite.

 


  1. Le fameux singleton où j'expose mon objet modèle et up. C'est la mois que je préfère.

 


Est-ce que vous voyez un pattern adéquat ? ou bien tout simplement comment vous aurez fais ? 


Réponses

  • AliGatorAliGator Membre, Modérateur
    Solution 1 ou 2 me semble la plus adaptée.

    Utiliser le Singleton à  tout va mène à  de l'overuse de ce pattern et souvent à  un détournement du pattern là  où ce n'est pas nécessaire.

    Certes l'injection de dépendance et le passage de proche en proche est gênant car tu as des VC intermédiaires qui n'en n'ont pas besoin. Mais c'est moins choquant qu'un singleton pour cet usage de mon avis perso.
  • CéroceCéroce Membre, Modérateur
    mars 2015 modifié #3
    Personnellement, je pratique toujours la deuxième solution (injection de dépendance). Explicite est mieux qu'implicite.
  • samirsamir Membre

    Merci. 


  • FKDEVFKDEV Membre
    mars 2015 modifié #5


    1. Dans chaque contrôleur je demande à  mon data contrôleur de faire un fetch et de me renvoyer l'objet customerInfos. C'est une bonne solution je trouve (comme y a le système du cache) mais le problème y aura trop de répétition de code.


     


    Pourquoi cela fait de la duplication de code ? 


     


    Solution 3, tu parles d'un singleton du DataController ou d'une classe du modèle ?


  • samirsamir Membre
    mars 2015 modifié #6

    Bonjour,


     




    Pourquoi cela fait de la duplication de code ? 




    La duplication du code parce que c'est la même requête dans plusieurs contrôleurs différents, pour moi si la donnée ne change pas ç'est une répétition de mettre des requêtes partout dans plusieurs contrôleur pour avoir cette donnée ( même si c'est le cache qui la renvoie).


     


    Exemple :



    - (void)fetchCustomerInfosWithCompletion(void (^)(SGCustomerInfos  *customerInfos, NSString  *errorMessage, BOOL noNetwork))completion {

    if (noNetwork) // Blabla
    if (message) // Blabla
    ...
    }



    Solution 3, tu parles d'un singleton du DataController ou d'une classe du modèle ?




     


    En fait je cherche un pattern qui me permettrai de partager mes Objets modèles. Je connaissais l'injection de dépendance mais j'ai évoqué le point gênant plus haut.


     


    Je parlais d'un singleton pour l'objet modèle mais je savais d'avance que je n'opterai pas pour cette solution, ma question était dans le but de chercher un pattern nouveau que je connais pas et qui me facilitera un peu les choses. 


Connectez-vous ou Inscrivez-vous pour répondre.