Organisation classe Open Source
JegnuX
Membre
Salut à tous,
Je suis sur le point de mettre sur github une classe que je me suis faite, mais je me posais une question...
En fait y'a trois classes, mais une seule est vraiment utile, les deux autres étants utilisées par la première, et n'ont pas vraiment d'intérêt à être utiliser hors contexte.
Du coup je sais pas quoi faire :
- Utiliser un seul couple de fichier .h/.m et je met l'interface et l'implémentation de ces deux classes dans le .m
- Utiliser un couple de fichier .h/.m par classe.
ou éventuellement :
- Utiliser un seul couple de fichier .h/.m et je met l'interface de ces deux classes dans le .h et l''implémentation dans le .m
En gros, préférer la lisibilité du code, ou la facilité à inclure ma classe dans un projet ?
Je suis sur le point de mettre sur github une classe que je me suis faite, mais je me posais une question...
En fait y'a trois classes, mais une seule est vraiment utile, les deux autres étants utilisées par la première, et n'ont pas vraiment d'intérêt à être utiliser hors contexte.
Du coup je sais pas quoi faire :
- Utiliser un seul couple de fichier .h/.m et je met l'interface et l'implémentation de ces deux classes dans le .m
- Utiliser un couple de fichier .h/.m par classe.
ou éventuellement :
- Utiliser un seul couple de fichier .h/.m et je met l'interface de ces deux classes dans le .h et l''implémentation dans le .m
En gros, préférer la lisibilité du code, ou la facilité à inclure ma classe dans un projet ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Après, je te dirais que j'aime autant qu'il y ait un .h par classe. Ce qui compte c'est que la doc indique clairement quel .h doit être importé.
Pour du gros code privé je privilégie la création de nouveaux fichiers. Quand il s'agit de compiler sous forme d'une library il suffit d'indiquer qu'on ne souhaite pas exporter les headers de nos classes privées.
Concernant le cas d'un projet Open Source, la même chose s'applique mais pour une raison différente: la lisibilité du code. Même si c'est privé, le but de l'Open Source c'est aussi que chacun puisse éventuellement contribuer, que ça soit dans son coin ou publiquement. Donc niveau re-lecture du code, avoir une classe ou plusieurs classes privées dans des fichiers dédiés ne pose pas de problème, tant que la notation est explicite:
Rien que le fait de voir ce underscore avant le namespace suffit à faire comprendre qu'il s'agit d'une classe privée.
Si on regarde JSONKit par exemple, y'a qu'un seul couple .h/.m pour tout.
après, avec tout dans un seul fichier, mon .m fait toujours moins de 1000 lignes. C'est pas non plus le seigneur des anneaux.
Moi je fais toujours des libs avec des projets séparés dans le workspace de mon appli.
Au niveau organisation de code, lisibilité, ça change tout... mais aussi au niveau navigation dans le code, et surtout au niveau des project settings
Par exemple, quand je veux utiliser AFNetworking dans mon appli, dans mon xcworkspace je fais un nouveau projet de type "Static Library" que je nomme AFNetworking.xcodeproj. Je met dans ce nouveau projet Xcode tous les fichiers de AFNetworking (récupérés sur le github de AFN). Puis dans mon projet principal MonAppli.xcodeproj (qui est dans le même workspace), dans la Build Phase "Link with binaries", je rajoute libAFNetworking.a (qu'il détecte tout seul et me propose en tout premier dans la liste quand je clique sur le "+")
Les avantages sont super nombreux :
Et franchement, c'est rien à faire. Avec Xcode4 et les workspace, tout est assez rapide et assisté.
- A créer le projet pour la lib t'as rien à faire ou presque. Tu crées un nouveau projet de type "Static Library", tu mets tes fichiers dedans, et basta t'as une lib.
- A importer dans un autre projet du coup c'est une histoire de simple glisser-déposer du xcodeproj dans le workspace + ajouter la lib dans les Build Phases du projet de ton appli, et c'est tout (ça c'est bien simplifié avec les workspaces par rapport à Xcode 3 !)
Franchement je vois pas pourquoi s'en priver /wink.png' class='bbc_emoticon' alt=';)' />
Après par exemple quand c'est des petites classes genre, AU HASARD, OHAlertView, je trouve que ça fait beaucoup de mic mac pour pas grand chose...