Avatar ·

Como estruturar corretamente o modelo em MVC no PHP? Problemas com Fat Model e lógica de negócios

Olá a todos! Sou um desenvolvedor PHP iniciante e já escrevo em Laravel há alguns meses. Mas sinto que estou fazendo algo errado com os models.

Tenho um projeto de loja virtual. Inicialmente, colocava toda a lógica nos models Eloquent. Por exemplo, o model Order contém:

class Order extends Model
{
    public function calculateTotalWithDiscount($couponCode) { ... }
    public function validateStock() { ... }
    public function sendConfirmationEmail() { ... }
    public function generateInvoicePdf() { ... }
    public function applyLoyaltyPoints($userId) { ... }
    public function checkFraud() { ... }
}

Agora esse model já tem mais de 2000 linhas. Entendo que isso é um "Fat Model", mas não sei como dividir corretamente as responsabilidades. Na internet há muitos debates: uns dizem que o model deve ser apenas para trabalhar com o banco de dados, outros — que toda a lógica de negócios deve estar no model.

Digam-me, como organizar corretamente...