Посадіть пухких моделей на дієту з занепокоєнням - Signal v
Різні моделі у вашому додатку Rails часто поділяють набір наскрізних проблем. У Basecamp ми маємо майже сорок таких проблем з такими іменами, як Trashable, Searchable, Visible, Movable, Taggable.

Ці проблеми включають як доступ до даних, так і логіку домену щодо певного зрізу відповідальності. Ось спрощена версія позначеного концерну:
Потім це занепокоєння можна змішати з усіма моделями, які можна позначити, і у вас буде єдине місце для оновлення логіки та аргументів щодо цього.
Ось подібне занепокоєння, коли все, що ми додаємо, - це метод одного класу:
Побоювання також є корисним способом вилучення фрагмента моделі, який не здається частиною її сутності (те, що є і що не є суттю моделі, - це нечітка лінія та довше обговорення), не переходячи на повну єдину відповідальність Принцип та ризик створення повітряних запасів об'єкта.
Ось проблема Dropboxed, яку ми поєднуємо лише з моделлю Person, що дозволяє нам пізніше направляти вхідні електронні листи від потрібної людини:
Зараз це, звичайно, не єдиний спосіб нарізати пухкі моделі. Для видимого занепокоєння ви можете мати Viewer.visible (current_account.posts, to: current_user) і інкапсулювати запит в окремому об’єкті. Для Dropboxed ви можете мати самостійний клас Dropbox.