Турбота - це проста, але потужна концепція. Він існує для повторного використання коду. По суті, ідея полягає в тому, щоб витягти загальні та / або контекстні фрагменти коду, щоб очистити моделі та уникнути їх надмірного поглинання та некерованості.
Я хотів би чітко вказати, що ви повинні використовувати сервісні об'єкти для забезпечення функціональності, яка не стосується конкретного об'єкта. Наприклад, в організації багато користувачів. Тепер адміністратору організації потрібно експортувати CSV усіх користувачів для цієї організації. Цей код можна розмістити в моделі організації, але оскільки це не відповідальність об'єкта організації, цей код слід розмістити в класі, де u просто передають об'єкт організації, і він повертає CSV всіх користувачів.
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
Кожного разу, коли вам потрібна генерація CSV, ви можете застосувати цю логіку у наведеному вище класі. Цей підхід утримує об'єкт (в даному випадку модель організації) в чистоті від коду, який не повинен бути його відповідальністю. Загальним принципом, якого я дотримуюсь, є: якщо код, який він модифікує самооб’єкт, перемістіть код до об’єкта служби.
Примітка: Ваше запитання стосувалось проблем, але я думав додати кілька додаткових матеріалів, яких я слідую, щоб підтримувати базу коду чистою та керованою, оскільки це може допомогти колегам-програмістам. Цей вищезазначений підхід є спірним.