Organisation des macros, constantes et autres imports

muqaddarmuqaddar Administrateur
Salut,

Je voulais savoir comment vous organisiez vos fichiers de macros, constantes ou autres.
Au départ, je mettais tout dans prefix.pch. Seulement, avec le temps ce fichiers s'est alourdit... (+ de 400 lignes).

Donc, je voulais savoir quelles habitudes vous aviez pour diviser ce genre de choses (sachant que des macros génériques, des contantes, ou même des imports de sous-classes et/ou catégories peuvent évidemment être utilisées par une multitude de classes et qu'il faudra donc les importer là  où c'est nécessaire).

Réponses

  • AliGatorAliGator Membre, Modérateur
    03:32 modifié #2
    Bah moi je fais pareil :

    1) Tout dans le .pch au début
    2) Quand il commence à  y en avoir beaucoup et que je veux faire le ménage, je déporte ça dans plusieurs autres fichiers .h (LogMacros.h, StringMacros.h, ...) et je #import ces ".h" dans le pch :P

    Par contre après je mets pas toujours tout dans le .pch (ou dans les .h importés depuis le .pch)
    Par exemple les catégories il m'arrive de m'obliger à  faire le #import là  où j'en ai besoin (surtout si c'est pas partout) plutôt que les #import dans le .pch ou un des .h qu'il importe.
    Les constantes style noms de NSNotification (MachinDidChoseNotification, ...), noms des clés de dictionnaires (TrucUserInfoTitleKey, TrucUserInfoAuthorKey, ...) et tous les trucs qui sont par nature associés à  une classe donnée (la classe qui émet la notification, la classe qui déclare l'objet générant le userInfo dont j'utilise les clés, ...) je les laisse dans les fichiers des classes associées à  ces constantes. Un peu comme quand je déclare un @protocol pour prévoir un delegate pour ma classe, je le déclare dans le .h de la classe qui l'utilise (celle qui déclare une ivar delegate, et qui envoie les messages du @protocol au delegate)...
  • muqaddarmuqaddar Administrateur
    03:32 modifié #3
    dans 1290782554:

    Bah moi je fais pareil :

    1) Tout dans le .pch au début
    2) Quand il commence à  y en avoir beaucoup et que je veux faire le ménage, je déporte ça dans plusieurs autres fichiers .h (LogMacros.h, StringMacros.h, ...) et je #import ces ".h" dans le pch :P

    Par contre après je mets pas toujours tout dans le .pch (ou dans les .h importés depuis le .pch)
    Par exemple les catégories il m'arrive de m'obliger à  faire le #import là  où j'en ai besoin (surtout si c'est pas partout) plutôt que les #import dans le .pch ou un des .h qu'il importe.


    Ah, OK, c'est ça que je voulais savoir !  ;)


    dans 1290782554:

    Les constantes style noms de NSNotification (MachinDidChoseNotification, ...), noms des clés de dictionnaires (TrucUserInfoTitleKey, TrucUserInfoAuthorKey, ...) et tous les trucs qui sont par nature associés à  une classe donnée (la classe qui émet la notification, la classe qui déclare l'objet générant le userInfo dont j'utilise les clés, ...) je les laisse dans les fichiers des classes associées à  ces constantes.


    Ok, oui c'est le mieux.

    Ok, j'y vois plus clair et je vais découper tout ça parce que c'est devenu la foire.  :P

    En plus comme je partage des choses entre versions iPad et iPhone, et d'autres non, y'a intérêt à  faire très attention et s'organiser ! ;)
  • tabliertablier Membre
    03:32 modifié #4
    Je fais presque pareil. Dans chaque projet j'ai un definir.h qui contient les constantes et #define spécifiques du projet. Et j'ajoute dans le .pch l'import du fichier de définition et hop, ça marche.
    De même les méthodes communes à  l'ensemble d'un projet sont mises dans une catégorie de NSApplication et le .h de la catégorie est également importé dans le .PCH
  • FKDEVFKDEV Membre
    novembre 2010 modifié #5
    Ma regle de codage perso en ce qui concerne les constantes et macro est simple :

    Les mettre au plus près de de l'endroit ou elles sont utilisées.

    Juste au-dessus d'une fonction, si elles ne sont utilisées que dans la fonction.
    En haut d'un .m si plusieurs fonctions du .m y accédent.
    Dans le .h d'une classe, si elles font partie de l'interface de la classe.
    Dans le dossier d'un module, si elles sont communes à  plusieurs classess du module.
    Dans un .h global si elles sont utilisées plus largement que les cas précédent.

    Dans une grosse appli, faite en équipe, c'est bien de prevoir un decoupage à  l'avance de l'arborscence du projet et décider où on va mettre les constantes, etc afin que chaque module soit homogene.

    Dans une appli iPhone, j'imagine que ça peut vite devenir le bordel car on peut se faire pièger par la rapidité du developpement, les  nouvelles fonctionnalités pas forcément prévue mais qui semble bien marcher chez les autres, ou même les nouvelles api d'apple.

    D'ailleurs je n'ai jamais vu de SDK aussi dynamique, tous les 6 mois il y a des nouveaux frameworks.
  • muqaddarmuqaddar Administrateur
    novembre 2010 modifié #6
    Merci de ton retour FKDEV.

    C'est vrai que l'approche des .h de constantes est la plus modulaire possible (comme le disait Ali aussi).

    Il peut s'avérer que des classes différentes aient besoin des mêmes constantes mais que les autres n'aient pas besoin de les connaà®tre, exit donc de les mettre dans le .pch ou de les importer dans ce .pch. Il faudra donc importer le fichier dans les classes qui en ont besoin.
  • muqaddarmuqaddar Administrateur
    03:32 modifié #7
    De même les méthodes communes à  l'ensemble d'un projet sont mises dans une catégorie de NSApplication


    Tiens. Tu as des exemples de méthodes où ça peut servir ?
  • FKDEVFKDEV Membre
    03:32 modifié #8
    dans 1291012933:

    ... Il faudra donc importer le fichier dans les classes qui en ont besoin.


    Oui mais ce n'est pas genant car c'est explicite. Quand il y a un compromis à  faire, je choisis souvent la solution la plus explicite.
    Je prefere avoir vingt lignes d'include par fichier que de tout mettre dans le .pch car cela permet de savoir ce qu'une classe utilise. Si elle va etre facile a reutiliser dans un autre projet ou pas.
    Bon si t'as vingt lignes d'include, tu sais que quand tu vas vouloir reutiliser la classe, tu vas tirer tout le plat de spaghetti avec.
  • muqaddarmuqaddar Administrateur
    03:32 modifié #9
    Bien sûr.  ;)

    Bon, j'ai commencé le ménage.  :P
Connectez-vous ou Inscrivez-vous pour répondre.