Question
Avant-propos: Ce n'est pas beaucoup sur la façon dont le code de la structure dans les fichiers. J'ai que vers le bas. Ceci est plus du sujet de l'organisation de votre arbre source. Espérons que quelqu'un va simplement dire: « Voici un lien sur le sujet. » Cependant, les opinions de première main sur le sujet sont les bienvenus aussi.
Je l'ai fait un peu de creuser sur ce sujet et trouver des tonnes de matériel sur la structure simple. Je suppose que l'hypothèse est que, au moment où vous avez besoin pour faire face aux problèmes de la taille de votre base de code, vous connaissez déjà la réponse. Cependant, même les IDEs semblent mener une guerre sainte sur la façon dont ces projets devraient être structurés (ce qui est ce que je voulais commencer dans ce fil).
Java appliquée la structure du package dans la langue. Coup de coeur pour cela. Eclipse vous permet d'utiliser des projets d'avoir (potentiellement) indépendant - « seaux », nous allons les appeler dans cet exemple - seaux de code correspondant. IntelliJ a des concepts distincts mais similaires avec des « modules » au sein d'une instance de singleton d'un « projet ». Si vous voulez un autre projet, vous êtes essentiellement à partir de zéro.
Cependant, offres RubyMine pas de tels modules dans les applications de rubis, et par défaut veut juste tout slam dans le répertoire racine. Il permet aux répertoires, on pourrait donc essentiellement simplement choisir une structure arborescente arbitraire et courir avec lui. Cela me implique de leur intention était que toutes les classes ont accès à toutes les autres classes au sein de votre projet. Cela pourrait avoir une résolution par l'utilisation de « modules » Ruby, ou peut-être juste un modèle honneur système de « ne fait pas référence à ce genre de choses. »
Alors, pour le mettre succinctement, dire que je devais construire un concept « foo » et un « bar », et les deux dépendent d'un « util » classe. peut-être que je vais les déployer comme des pierres précieuses, peut-être je ne veux pas. Je pouvais:
- Slam tous en un seul projet RubyMine et simplement ignorer le fait que « foo » et « bar » ont aucune raison d'être au courant de l'autre.
- Mettre chacun dans son propre projet RubyMine. Cela semble être une vraie douleur en cas de développement simultané. tout, util 'd'abord devrait être emballé séparément et inclus comme une ressource externe dans les autres projets.
ne semble ni particulièrement attrayant. Thougts?
La solution
Je développe trois indépendamment, puis faire util un petit bijou. Dans le Gemfile pour chacun des foo et bar, vous pouvez donner un rel="nofollow"> à la pierre précieuse afin que vous puissiez développer tous en même temps sans la douleur de vous embêter avec les numéros de version et ainsi de suite (pour la production, vous indiqueraient alors à la vrai bijou sur Rubygems ou à un dépôt git).
Pour les structures du projet, consultez le Ruby conditionnement standard et Patterns Gem .