
Тонкие контроллеры и модели. Использование паттернов проектирования в Rails-приложении
Mirkom63 3 часа назад Тонкие контроллеры и модели. Использование паттернов проектирования в Rails-приложении Простой 9 мин 3.1K Ruby on Rails * Туториал Вечный спор в среде MVC-фреймворков - что лучше? Толстые модели и...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. Mirkom63 3 часа назад Тонкие контроллеры и модели. Использование паттернов проектирования в Rails-приложении Простой 9 мин 3. 1K Ruby on Rails * Туториал Вечный спор в среде MVC-фреймворков - что лучше?
Толстые модели и тонкие контроллеры или наоборот? Классический подход Rails — “Fat Model, Skinny Controller”. Но что происходит, когда ваша модель User разрастается до 800 строк кода, содержит 15 валидаций, 10 коллбеков и 30 методов бизнес-логики?
Технические детали
Тестировать это становится кошмаром, а понять что и когда вызывается — квестом для детектива. Сегодня мы рассмотрим альтернативный вариант — тонкие контроллеры и… тонкие модели! В основе нашего эксперимента будет стоять первое правило SOLID — Single Responsibility Principle (у класса должна быть только одна причина для изменения).
Как правило, модель ответственна за обращения к БД, валидации, коллбеки, пользовательскую бизнес-логику сущностей и так далее. Теперь модель будет отвечать только за связь с БД. Таким же образом мы снимем лишнюю ответственность с контроллеров, раскидаем всё по классам, чтобы код стал читабельнее, красивее и проще в поддержке.
Что не так с классическим подходом? Давайте посмотрим на типичную модель в Rails-проекте:class User < ApplicationRecord validates :email, presence: true, uniqueness: true, format: { with: EMAIL_REGEX } validates :password, length: { minimum: 8 } # ... ещё 15 валидаций before_validation :normalize_email after_create :send_welcome_email after_create :create_profile # ...
Отраслевые последствия
ещё 10 коллбеков scope :active, -> { where(active: true) } scope :premium, -> { where(plan: 'premium } # ... ещё 18 scope'ов def upgrade_to_premium! # 50 строк кода end def calculate_discount # 30 строк кода end # ...
ещё 28 методов end Проблемы такого подхода:Модель на 800+ строк — никто не понимает что там происходитКоллбеки срабатывают везде — даже когда не нужноТесты медленные — приходится поднимать всю ActiveRecordПереиспользовать логику сложно — всё завязано на модельРефакторинг — страшный сон (изменил одно — сломалось в 10 местах)Как избежать этих проблем? Давайте рассмотрим пример, в котором мы делаем вывод списка товаров и их создание, а далее по шагам поймём, какие есть проблемы и как их решить, используя паттерны. # Route # config/routes.
draw do resources :products end # Контроллер # app/controllers/products_controller. rb class ProductsController < ApplicationController def index @products = Product. all @products = @products.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





