Canal Codica - корисне про IT - @codica - №3087
1. God Model — коли модель знає ВСЕМодель User у 700 рядків? Там і валідації, і бізнес-логіка, і парсинг Excel, і надсилання email’ів, і… сльози.❌ Антипатерн:class User < ApplicationRecord before_save :normalize_email def send_welcome_email; end def export_to_csv; end def soft_delete; end def hard_delete; end def resurrect; end # ще 53 методиend
✅ Краще:— винести бізнес-логіку в сервісні об'єкти— окремі обов'язки – в concerns— парсинг/експорт – в окремі класи2. Fat Controller — коли кожен екшн з душею (і сотнею рядків)OrdersController, де create – на 70 рядків, а update – на 130? Це вже не REST, це серіал.✅ Краще:— витягнути логіку в форм-обʼєкти— використовуй interactor’и, services, commands— before_action з умовами – ок, але без фанатизму3. Колбеки-лабіринти (before_save, after_commit, around_update)Якщо ти не впевнений, чому один і той самий рекорд тригерить три листи й два оновлення таблиць – ти, мабуть, десь переборщив із колбеками.❌ Проблема:— Колбеки приховані— Їх важко тестувати— Вони викликаються неочікувано✅ Рішення:— винось сторонні ефекти (email, push, інтеграції) у ActiveJob— використовуй Service objects, де логіка викликається явно, а не «десь там у фоні»4. Business Logic in Views (ERB має бути простим)Якщо в show.html.erb ти бачиш це:<% if current_user.admin? && order.status == 'pending' && Time.now < order.expires_at %> <%= link_to 'Approve Order', approve_order_path(order) %><% end %>
…то ти бачиш антипатерн.✅ Краще:— логіку – в helpers або view models— мінімум умов у ERB, максимум змісту5. Overuse of default_scopeЦе ніби зручно: ти хочеш, щоб усюди is_active: true. Але потім ти хочеш зробити with_deleted… і нічого не працює.❌ Антипатерн:default_scope { where(is_active: true) }
❗ Чому погано:— default_scope автоматично додається у ВСІ запити – навіть у joins, includes, count— складно зрозуміти, чому певні дані «не приходять»✅ Краще:scope :active, -> { where(is_active: true) }
Rails – це про швидкість. Але legacy приходить не вночі, воно починається з «та я просто тут один колбек додам».Вивчай свій код. Переписуй. Не соромся бути кращим, ніж був вчора.Хочеш частину 2 з антипатернами – напиши в коментарях 👇TikTok | Instagram | Telegram
217
25-07-21 09:45