Les préoccupations sont un concept simple mais puissant. Il existe pour la réutilisation du code. En gros, 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 ne deviennent trop gros et ingérables.
Je voudrais préciser explicitement que vous devez utiliser les objets de service pour fournir une fonctionnalité qui ne concerne pas l'objet spécifique. Par exemple, une organisation a de nombreux utilisateurs. Maintenant, l'administrateur de l'organisation a besoin d'exporter un CSV de tous les utilisateurs de cette organisation. Ce code peut être placé dans le modèle d'organisation mais comme il n'est pas de la responsabilité de l'objet d'organisation, ce code devrait être placé dans une classe où vous passez juste l'objet d'organisation et il retourne 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 générer un CSV, vous pouvez placer cette logique dans la classe ci-dessus. Cette approche permet de garder l'objet (dans ce cas, le modèle d'organisation) propre du code qui ne devrait pas être sous sa responsabilité. Un principe général que je suis est : si le code modifie l'objet lui-même, déplacez le code vers un objet de service.
Note : Votre question portait sur les préoccupations, mais j'ai pensé ajouter quelques éléments supplémentaires que je suis pour garder la base de code propre et gérable, car cela pourrait aider les autres programmeurs. L'approche ci-dessus est discutable.