J'ai deux classes, Task et Subtask. La sous-tâche varie très peu de la tâche sauf pour une chose importante, elle doit inclure un module différent.Sous-classes Ruby: incluant différents modules basés sur l'héritage
Les modules inclus, subtask_module et task_module, ont tous les deux les mêmes méthodes et alias à mes fins, mais en interne, ils fonctionnent un peu différemment une fois que le module inclus étend ses méthodes. Il n'y a aucun moyen de contourner cela pour moi parce que j'utilise un plugin.
Par exemple, ci-dessous, vous voyez belongs_to
dans tâche. belongs_to
est étendu à partir du module inclus, mais sa fonction diffère légèrement en fonction du module que j'inclus.
class Subtask < Task
include subtask_module
end
class Task
include task_module
# methods and aliases both classes use (defined in included file)
# but behavior changes based on
# included file
belongs_to :template
end
Quelle est la meilleure façon de faire quelque chose comme ça? En ce moment, cela fonctionne comme maintenant. Mais il semble gonflé parce qu'il y aura des choses inutilisées déclarées dans la tâche dont je n'ai pas besoin.
Quel est le meilleur moyen?
Pouvez-vous clarifier un peu la question? Parce que 'Subtask' étend' Task' vous pouvez appeler toutes les méthodes que vous pouvez appeler sur une 'Task' sur une' Subtask' (qu'elles soient définies explicitement dans 'Task' ou' included') et ensuite 'Subtask' peut ajouter son propres méthodes spécifiques qui ne sont pas disponibles sur 'Tasks'. Où sont les choses inutilisées déclarées dans 'Task'? – mikej
Terminé. J'espère avoir éclairci les choses un peu. Je ne voudrais pas les séparer dans des fichiers séparés. J'ai aussi essayé d'utiliser un troisième AbstractModule en tant que Mixin mais j'avais aussi des problèmes avec ça. – Dex
"D'où viennent les choses inutilisées déclarées dans la tâche?" - La réponse à cela n'est toujours pas claire pour moi. –