Concerns est un concept simple mais puissant. Il existe pour la réutilisabilité du code. Fondamentalement, l'idée est d'extraire des morceaux de code communs et / ou spécifiques au contexte afin de nettoyer les modèles et d'éviter qu'ils deviennent trop gros et ingérables.
Je voudrais spécifier explicitement que vous devez utiliser des objets de service pour fournir des fonctionnalités qui ne concernent pas l'objet spécifique. Par exemple, une organisation a de nombreux utilisateurs. L'administrateur de l'organisation doit maintenant exporter un fichier CSV de tous les utilisateurs de cette organisation. Ce code peut être placé dans le modèle d'organisation, mais comme ce n'est pas la responsabilité de l'objet d'organisation, ce code doit être placé dans une classe où vous passez simplement l'objet d'organisation et il renvoie le CSV de tous les utilisateurs.
class Services::GenerateCsv
def self.get_users org
#add logic the fetch users for the org and generate the CSV and return the CSV data
end
end
Chaque fois que vous avez besoin de la génération CSV, vous pouvez placer cette logique dans la classe ci-dessus. Cette approche maintient l'objet (dans ce cas, le modèle d'organisation) propre du code qui ne devrait pas être de sa responsabilité. Un principe général que je suis: si le code modifie l'objet self, déplacez le code vers un objet de service.
Remarque: votre question concernait des préoccupations, mais j'ai pensé à ajouter des éléments supplémentaires que je suis pour garder la base de code propre et gérable car cela pourrait aider d'autres programmeurs. Cette approche ci-dessus est discutable.