Comment organisez-vous vos classes ?

colas_colas_ Membre
avril 2013 modifié dans Xcode et Developer Tools #1

Créez-vous des dossiers dans le finder pour grouper vos classes ?


 


Ou bien, utilisez-vous seulement les "groups" ?


 


Enfin, utilisez-vous beaucoup les "groups" ?


Du genre :


 


-> monApp


|____> Model


|_________> CoreDataClasses


|________________>ForHuman


|________________>ForMachine


 


C'est-à -dire faà®tes-vous plein de sous-groups, sous-sous-groups, etc.


 


 


Je vous pose cette question pour avoir l'avis de développeurs cocoa confirmés et connaà®tre les bonnes pratiques et les défauts des différentes pratiques.


 


 


J'ai essayé de garder mes classes organisées dans le finder, mais quand j'ajoute les fichiers avec l'option "Create folder references for any added folder", les dossiers sont bleus au lieu de jaune et surtout : il ajoute les dossiers dans les "compile sources" au lieu d'ajouter les .m. Du coup, les .m ne sont pas compilés.


 


Merci !


«1

Réponses

  • Bonjour,


     


    Pour ma part, si c'est un projet simple j'organise de cette façon


    ->monApp


    AppDelegate.h


    AppDelegae.m


    |_______> Screens


    |__________>UICustom


    |_______>Model


    |__________>Managers


    |__________>Stores


    |_______>Objects


     


    Le répertoire Screens identifie les écrans mais également le fait qu'on travaille sur du View - Controller


     


    K.

  • AliGatorAliGator Membre, Modérateur

    Perso en général je fais correspondre les Groups que je crée dans Xcode avec les dossiers dans le Finder.


    Sauf quelques rares cas où je crée des groupes dans Xcode très bas niveau (genre grouper des classes qui pourraient aller ensemble mais j'ai voulu affiner mon groupement dans Xcode encore +), mais en général je préfère que ça corresponde entre Xcode et le Finder.


     


    Les groupes (et donc dossiers) que je retrouve régulièrement dans la plupart de mes projets :


     


    Groupe du nom de l'appli


     |-- Classes


     |    |-- Services


     |    |    '--- Un groupe par "Service" (cf ci-dessous (1))


     |    |-- Model


     |    |    |-- Mon DataModel CoreData, si j'utilise CoreData


     |    |    '-- Un groupe par classe modèle


     |    |-- ViewControllers


     |    |    |-- "Generic" : groupe contenant les UIViewControllers génériques de mon appli (NavigationController custom, Container View Controller customisé, ...)


     |    |    |-- Un groupe par UIViewController/écran de mon appli, contenant le .h, le .m et le .xib correspondant


     |    |    '-- Parfois je groupe ces "groupes de VC" par thème (suite d'écrans genre "Tutorial", etc)


     |    |-- Cells


     |    |    '-- Un groupe par UITableViewCell customisée (NB parfois je les mets aussi dans le groupe précédent avec les ViewControllers associés, mais souvent mes UITableViewCell sont utilisées par plusieurs UIViewControllers différents)


     |    |-- Widgets


     |    |     '-- Un groupe par composant UI customisé/réutilisable (par exemple si je fais une UIView réutilisable pour afficher une bulle d'aide, ou pour afficher un encart avec les infos d'un utilisateur, ou pour afficher une liste d'autocomplétion...)


     |    '-- Tools


               '-- Un groupe par classe utilitaire, en général des catégories (genre catégorie sur NSString pour encoder une chaà®ne en Base64 ou calculer son MD5, catégorie sur NSDate pour avoir le texte relatif de la date façon "il y a 1h" ou "il y a 3 jours" ou "demain"..., etc, etc) ou encore des classes pour gérer mes préférences application (wrapper autour de NSUserDefaults), ce genre de trucs


     |-- Resources


     |    |-- data : mes fichiers de données '(Localizable.strings, des PLIST de données...)


     |    '-- images : mes images, en général groupées avec un groupe par thème d'images (pictos, tabIcons, frames, ...)


     |-- Supporting Files


          '-- Les fichiers Info.plist, main.m, Icon, Default, Prefix.pch...


    Stubs


          '-- Mes bouchons pour tester l'appli même si le serveur (via OHHTTPStubs) n'est pas prêt/fini ou down. Un groupe par thème de bouchon


    UnitTests


          |-- FixturesMes fixtures (fichiers de données type PLIST ou XML utilisés comme inputs ou outputs pour les tests U)


          '-- Un groupe par thème de test unitaire, avec un ".m" par "Test Suite"


    Frameworks


          '-- Les frameworks utilisés par mon projet (".frameworks" Apple et libs ".a" externes)


     


     


    (1) Ce que j'appelle "Service" ci-dessus ce sont en général des singletons (enfin pour être précis, des classes avec une sharedInstance) fournissant des "services" au sens large.


     - Typiquement j'en ai souvent de toute façon un pour communiquer avec mon serveur (par exemple une méthode +[MyService fetchUsersList] qui va envoyer la requête asynchrone pour demander à  mon API serveur de me retourner la liste des utilisateurs, ce genre de méthode retournant chez moi en général un handler immédiatement (requête asynchrone), handler me permettant d'annuler la requête, de lui associer un completionBlock pour être prévenu de son succès ou son erreur...)


     - Je peux avoir d'autres services, par exemple j'ai souvent ReachabilityService pour tester la connectivité de mon appli, parfois un UpdateService si j'ai un service pour vérifier la présence de mise à  jour... etc, etc Bref, tu vois l'idée que je mets derrière "Service".


     


    Bien sûr, tout ça et toute cette arborescence c'est pour le xcodeproj de mon appli. A côté dans le même workspace si j'ai les xcodeproj qui génèrent mes librairies externes, comme j'ai déjà  expliqué dans ma conférence CocoaHeads Rennes #12 (voir aussi sur ce forum où j'en parle)


  • tabliertablier Membre
    avril 2013 modifié #4

    Je ne fais que des projets simples et j'utilise des groupes qui (normalement) correspondent à  des dossiers de même nom dans le dossier du projet. L'architecture des groupes du projet est alors très semblable à  l'architecture des dossiers dans le dossier projet.


    Mais appDelegate par exemple reste en dehors des dossiers. Voir un exemple ci-dessous.


    A noter que Classes, Lesvues et Prefs contiennent des classes triées suivant leur rôle.


  • Hello,


     


    Je fais correspondre les groups avec l'architecture de mes dossiers (sauf le group supporting files).


     


    En gros :


     


    |- Ions & Art Works (pour les images "default" par exemple)


    |- Themes (contient une classe abstraite permettant de customiser mon interface)


    |  |- Default (theme par défaut pour mon interface, avec les png qui vont bien)


    |- Classes


    |  |- Utils (classe contenant des singletons, des classes category)


    |  |- UI (Clases pour tous mes view controllers, avec des sous dossiers par fonction)


    |  |  |- Common (contient les view controllers génériques, par exemple un UITableViewController pour core data)


    |  |- DataModel (contient mon modèle de données)


    |- Supporting files (contient les fichers .strings et quelques xib)

  • .....mais quand j'ajoute les fichiers avec l'option "Create folder references for any added folder", les dossiers sont bleus au lieu de jaune....


    L'option à  utiliser est : Recursively create groups for any added folder


    la je suis sous Xcode 3.2.6 et j'espère que cette option existe toujours sous xCode 4.xx. 


  • Pareil qu'Alligator à  peu de choses près. Et j'insisterai bien plus que lui quant à  la conservation de la même hiérarchie dans le Finder... Quand je vois des projets avec tous les fichiers à  la racine, j'ai souvent peur d'aller voir le code qui doit être tout autant bordélique :p


  • AliGatorAliGator Membre, Modérateur

    Oui si tu fais "Create folder references for any added folder" ça va créer des dossiers y compris au sein de ton Bundle final.


     


    Par exemple si tu as un dossier "images" et que tu l'ajoutes à  ton projet Xcode ainsi, tu auras un dossier "images" avec icône bleue dans ton xcodeproj, et quand tu vas compiler ton appli au lieu que les images se mettent directement dans "Resources" et que tu puisses utiliser "[UIImage imageNamed:...]", le dossier "images" va aussi se retrouver dans le bundle de l'appli avec ses fichiers images dedans, au lieu qu'elles soient à  la racine de "Resources", et du coup "imageNamed:" ne marchera pas si tu lui fournis le nom de l'image, etc...


     


    Donc en général, ce "Create folder references" n'est vraiment pas ce que tu veux. Rares sont les cas où tu veux des "dossiers bleus" dans Xcode au final. Dans 99.9% des cas c'est bien "Recursively create groups for any added folder" qu'il faut choisir.


  • Pareil que Ali, peut-être en moins poussé mais j'aime que tout soit correctement organisé et link vers le Finder de manière transparente et directe.


  •     Je vois que nous sommes tous un peu maniaque. Euh, dans le bon sens du terme bien sur!


  • AliGatorAliGator Membre, Modérateur

    Pas maniaques, organisés ;)


  • Perso, voici mon organisation sur mon dernier projet.


     


  • tabliertablier Membre
    avril 2013 modifié #13

    @xyloweb


    Les questions sont: gardes-tu une organisation dans "Finder" identique à  celle que tu montres dans le projet?


    Ou bien l'organisation des dossiers dans le finder est-elle totalement différentes de l'organisation interne du projet?


  • SmySmy Membre

    Pareil qu'Ali


     


    (bon en fait ce n'est pas vrai, mais c'est juste pour me faire bien voir)


  • CéroceCéroce Membre, Modérateur

    Pareil que Smy ;-)


  • DrakenDraken Membre
    avril 2013 modifié #16
    Pareil qu'Ali !


    à‰dit : Céroce, t'avais pas le droit de poster 2 ms avant moi !
  • AliGatorAliGator Membre, Modérateur

    Bande de copieurs :D


  • J'organise mon suivant mon envie, mais surtout en fonction de l'application : pas besoin de faire 36 "séparations" si y'a pratiquement rien.


    Je n'ai pas d'organisation spécifique, même si j'ai tendance à  appeler toujours de la même manière le groupe des images etc.


    Par contre, au niveau Finder, c'est un vrai b*rd*l, Idesroziers ferait une crise cardiaque, mais tout est rangé via le "Group" quand on ouvre le projet avec XCode.


    D'ici peu de temps je ferais correspondre Group & Folders, histoire de faire plus propre.


  • Comme Larme !!!!


  • @xyloweb


    Les questions sont: gardes-tu une organisation dans "Finder" identique à  celle que tu montres dans le projet?


    Ou bien l'organisation des dossiers dans le finder est-elle totalement différentes de l'organisation interne du projet?


    Ben c'est à  peu près la même chose dans le Finder avec un regroupement par type de classe.


    Le gestionnaire Xcode fait le reste...

  • Je ne me préoccupe pas du Finder, je laisse xcode se débrouiller.


     


    Voici comment je me suis organisé :


     


     


    Groupe du nom de l'appli

     |--Données

     |    '--- Gestion des données et du schema de rafraichissement de celles-ci

     |--Interface

     |    '--- AppDelegate, StoryBoard

     |    '--- Ads

     |    '--- Cells

     |    '--- Un groupe par grand thème de l'application (ex par tab si c'est une navigation par tab) avec mes controlleurs

     |--Webservices

     |    '--- Gestion des requêtes Webservices 

     |--Ressources

     |    '--- Ce sont mes images, avec des groupes au feeling : ideogrammes, patterns, icons and launch screens, tab items, etc.

     |--Plugins

     |    '--- Ce qu'Ali a appelé Tools

     |--Supporting Files 

     |    '--- info.plist, main.m, prefix.pch un fichier "nota" lié à  la target de Tests dans lequel je jette des idées lorsqu'elles viennent, les codes couleurs utilisés, les infos générales que j'ai pas envie de retenir mais que je n'ai pas envie de perdre ou de passer 20 min à  rechercher

     |--Tests

     |    '--- Les tests

     |--Frameworks

     |    '--- les frameworks apple

     |--Products

     |    '--- .app, .octests

     

     

    En gros ce que j'utilise le plus est vers le haut les groupes sont faits en fonction de ce que j'ai besoin d'utiliser plus ou moins en même temps / de manière séquencée pour éviter les aller/retours sans arrêt. Vues / controleurs est un peu imbriqué, je pourrai séparer mais je trouve ca assez pratique à  l'usage.

  • Question naà¯ve, à  quoi cela vous sert que ce soit organisé dans le finder ?


  • jpimbertjpimbert Membre
    avril 2013 modifié #23

    Question naà¯ve, à  quoi cela vous sert que ce soit organisé dans le finder ?


     


    Pour ma part j'utilise l'organisation en sous-dossiers plutôt pour coller à  l'organisation en modules / sous-modules du gestionnaire de version. Ce qui fait que l'organisation en sous-dossiers peut être différente de l'organisation en groupes sous Xcode qui regroupe toutes les images indépendamment de leur module d'appartenance, par exemple.


  • muqaddarmuqaddar Administrateur
    avril 2013 modifié #24

    Moi, ça ressemble à  ça:


     


  • Ca n'est pas rangé par ordre alphabétique !  >:)


  • Question naà¯ve, à  quoi cela vous sert que ce soit organisé dans le finder ?


    Pas a grand chose pour moi ... 

  • Moi ça me sert à  être iso par rapport à  ce que j'ai sur le projet et ce que j'ai dans le Finder. Tu peux tout mettre dans une seul dossier dans le Finder et ensuite rangé en groupe dans ton projet mais je sais pas ... ça fait pas propre je trouve.


  • AliGatorAliGator Membre, Modérateur

    Ca me sert à  :


     - Etre organisé dans le Finder aussi et être cohérent, y compris pour mes collègues qui bossent avec moi sur le projet


     - Retrouver facilement dans le Finder mes fichiers quand j'en ai besoin


     - àŠtre cohérent avec mon système de gestion de version, y compris avec les éventuels submodules utilisés


     


    Après c'est sûr on peut s'en passer et tout foutre en vrac dans le Finder, mais ça fait un peu brouillon quand même ^^


  • Question naà¯ve, à  quoi cela vous sert que ce soit organisé dans le finder ?


     


    Pas grand chose dans l'absolu. Pour ma part je pense que cette manie d'organisation vient de mes années sur Unix. Du coup j'ai pris l'habitude de faire des dossiers. Il est vrai cependant que je ne vais que rarement piocher dans le finder.

  • muqaddarmuqaddar Administrateur

    Ca n'est pas rangé par ordre alphabétique !  >:)


     


    Non, c'est rangé par ordre d'importance des fichiers utilisés.


    Donc les dossiers du haut sont plus souvent ouverts que ceux du bas.

  • N'empêche c'est con qu'Apple propose pas une option pour garder une arborescence Finder identique à  celles des groupes Xcode.


     


    Le must serait même de pouvoir activer ou non cette option par groupe...


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