Preocupaciones es un concepto simple pero poderoso. Existe para la reutilización del código. Básicamente, la idea es extraer fragmentos de código comunes y / o específicos del contexto para limpiar los modelos y evitar que se vuelvan demasiado gordos e inmanejables.
Me gustaría especificar explícitamente que debe utilizar los objetos de servicio para proporcionar una funcionalidad que no es de interés para el objeto específico. Por ejemplo, una organización tiene muchos usuarios. Ahora, el administrador de la organización debe exportar un archivo CSV de todos los usuarios de esta organización. Este código se puede colocar en el modelo de organización, pero como no es responsabilidad del objeto de la organización, este código debe colocarse en una clase en la que simplemente se pasa el objeto de la organización y devuelve el CSV de todos los usuarios.
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
Siempre que necesite la generación de CSV, puede colocar esa lógica en la clase anterior. Este enfoque mantiene el objeto (en este caso, el modelo de organización) limpio del código que no debería ser su responsabilidad. Un principio general que sigo es: si el código modifica el objeto self, mueva el código a un objeto de servicio.
Nota: Su pregunta era sobre inquietudes, pero pensé en agregar algunas cosas adicionales que sigo para mantener la base del código limpia y manejable, ya que podría ayudar a otros programadores. Ese enfoque anterior es discutible.