Ответ
'Толстая модель, тонкий контроллер' (Fat Model, Skinny Controller) — это архитектурный паттерн, при котором основная бизнес-логика приложения концентрируется в моделях, а контроллеры остаются максимально 'тонкими', выполняя только задачи по обработке HTTP-запросов и вызову методов моделей.
Этот подход противопоставляется 'Тонкой модели', где логика размазана по контроллерам или сервисным слоям, что может привести к дублированию кода и усложнению тестирования.
Пример (Python/Django-like):
# models.py - "Толстая" модель с бизнес-логикой
class Order:
def __init__(self, items, status='new'):
self.items = items
self.status = status
def calculate_total(self):
# Логика подсчета суммы заказа
return sum(item.price for item in self.items)
def confirm_payment(self):
# Логика изменения статуса
if self.status == 'new':
self.status = 'paid'
# ... отправить уведомление
return True
return False
# controllers.py - "Тонкий" контроллер
def process_order_payment(request):
order_id = request.POST.get('order_id')
order = Order.objects.get(id=order_id) # Получаем модель
# Делегируем всю логику модели
if order.confirm_payment():
return http_response("Payment confirmed!")
else:
return http_response("Payment failed.", status=400)
Преимущества:
- Инкапсуляция логики: Бизнес-правила находятся там, где им место — рядом с данными.
- Повторное использование кода: Методы модели можно легко вызывать из разных частей приложения (контроллеры, фоновые задачи).
- Упрощение тестирования: Легко тестировать модели в изоляции от веб-контекста.
Недостатки:
- Риск нарушения SRP: Модели могут стать слишком большими и отвечать за многое (God Object).
- Сложность: При большом количестве логики модель может стать трудной для понимания.