Preocupações é um conceito simples, mas poderoso. Ele existe para reutilização de código. Basicamente, a ideia é extrair pedaços de código comuns e / ou específicos do contexto para limpar os modelos e evitar que fiquem muito gordos e incontroláveis.
Gostaria de especificar explicitamente que você deve usar objetos de serviço para fornecer funcionalidade que não é a preocupação do objeto específico. Por exemplo, uma organização tem muitos usuários. Agora, o administrador da organização precisa exportar um CSV de todos os usuários desta organização. Este código pode ser colocado no modelo de organização, mas como não é de responsabilidade do objeto da organização, este código deve ser colocado em uma classe onde você apenas passa o objeto da organização e ele retorna o CSV de todos os usuários.
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
Sempre que você precisar de geração de CSV, você pode colocar essa lógica na classe acima. Essa abordagem mantém o objeto (neste caso, o modelo de organização) limpo do código que não deveria ser de sua responsabilidade. Um princípio geral que sigo é: se o código está modificando o objeto self, mova o código para um objeto de serviço.
Observação: sua pergunta era sobre preocupações, mas pensei em adicionar algumas coisas extras que sigo para manter a base de código limpa e gerenciável, pois pode ajudar outros programadores. Essa abordagem acima é discutível.