Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Codica - корисне про IT
Додано 14 лип 2024

Codica - корисне про IT

@codica
Кількість підписників: 2 125
Фото: 3,000
Відео: 149
Посилання: 1,540
Опис:
Привіт, друже, це канал про корисності в ІТ🤘 🔺Даємо практичні матеріали з RoR, JavaScript, QA, DevOps 🔺Розкажемо як знайти першу роботу без хвилювань та проблем ✍️Для звʼязку-@klimenko_nataly 👉 Відкриті вакансії - www.codica.com/careers
Джерело

Codica - корисне про IT | 1. God Model — коли модель знає ВСЕМодель User у 700 рядків? Там і вал...

Логотип телеграм спільноти - Codica - корисне про IT Codica - корисне про IT @codica
217 Охват/переглядів 2025-07-21 09:45 Повідомлення №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