MVC é um padrão arquitetônico famoso para a construção de aplicativos de software. Ele foi usado pela primeira vez para construir GUIs de desktop e agora é uma das maneiras mais populares de construir aplicativos da web e aplicativos móveis.
O MVC separa um aplicativo de software em três componentes:
- Modelo-representa a forma dos dados em nosso aplicativo
- Visualização-A parte do aplicativo com a qual o usuário interage. Ele representa a IU do seu aplicativo
- Controlador-O cérebro de seu aplicativo. O controlador é responsável pela maior parte de sua lógica de negócios. Se o seu aplicativo for um aplicativo da Web, o controlador tratará as solicitações que chegam ao seu aplicativo. Se o seu aplicativo for um aplicativo móvel, o controlador controlará o estado do seu aplicativo para suas visualizações
Agora que fizemos uma breve atualização sobre o framework MVC, neste artigo iremos dar um zoom em um componente do MVC que é subutilizado ou não está sendo usado em todo o seu potencial na maioria dos casos de uso.
Modelo
Embora a arquitetura MVC seja conhecida por muitos desenvolvedores da web, o uso de cada componente em todo o seu potencial e intenção arquitetônica ainda não é bem compreendido e um dos mais subestimados ou subutilizados desses componentes no MVC é o modelo.
A maioria das definições diz que o modelo representa os dados em seu aplicativo. No entanto, o modelo que representa a estrutura de dados subjacente de seu aplicativo, por design, também deve conter:
- Propriedades para representar dados específicos
- Lógica de negócios, como regras de validação
- Lógica que será executada nos dados
Propriedades para representar dados específicos
Esta parte é a mais fácil de entender, pois a maioria dos frameworks da web enfatiza a definição de propriedades aqui. Por exemplo, vamos pegar um aplicativo da web usando Sails, uma estrutura MVC Node.js, podemos ter um modelo de usuário definido assim:
//api/models/User.js module.exports={ atributos: { eu ia: {}, nome: {}, Endereço de email: {}, } } }
Você pode ver que nosso modelo é representado no Sails como um módulo JavaScript exportando um objeto. Neste objeto, há uma chave atributos
na qual definimos os dados específicos que este modelo representa.
Lógica de negócios
O modelo em MVC também deve ser capaz de implementar a lógica de negócios nos dados que representa. Por exemplo, a lógica de negócios comum para aplicativos da web inclui regras de validação.
As regras de validação impõem que os dados que chegam ao aplicativo atendam às restrições do design do sistema necessário. Um equívoco é fazer essa validação no nível do controlador. No entanto, esse é o trabalho do modelo.
Tomando nosso modelo Sails acima, vamos ver como o modelo deve abordar a lógica de negócios como validações:
//api/models/User.js module.exports={ atributos: { eu ia: { tipo:'string', requerido: verdadeiro isUuid: true }, nome: { tipo:'string', allowNull: true }, Endereço de email: { tipo:'string', isEmail: true, único: verdadeiro }, } } }
Você pode ver que nosso modelo seguindo os princípios do MVC fornece propriedades de validação para os dados que irá representar. Vejamos toda a lógica implementada:
-
type
-impõe que o tipo de dados (neste caso, deve ser uma string) -
obrigatório
-força que, ao criar novas instâncias deste modelo, os dados com este valor definido como verdadeiro devem sempre ser fornecidos -
allowNull
-Quando definido como verdadeiro para dados específicos, o modelo saberá que deve permitir a criação de instâncias com este valor de dados específico definido como nulo -
exclusivo
-Definir como verdadeiro informa o modelo para certificar-se de que apenas uma instância deve ter permissão para ter um valor específico para esses dados. Isso significa que o valor desses dados deve ser único -
isEmail
-Na maioria das vezes fazemos verificações como esta no controlador, mas ao usar o modelo em sua capacidade total, configuramos isso no modelo para garantir que um dado específico seja um e-mail -
isUuid
-Se for definido como verdadeiro para os dados do modelo, o modelo garante que os dados sejam de um formato UUID (v1, v2 ou v3)
Lógica que será executada nos dados
Os modelos devem conter lógica que lida com a manipulação de dados. Por exemplo, digamos que temos um modelo de postagem, o modelo deve conter métodos que obtenham os comentários de uma postagem específica.
Nos modelos Sails, cada modelo tem métodos estáticos como find
, findOne
, update
, etc. Isso ajuda no acesso aos dados que você pode chamada dos controladores.
Benefícios de usar o modelo em sua capacidade total
Em uma arquitetura MVC bem implementada, os modelos normalmente hospedam a maior parte da lógica de negócios porque essa lógica está intimamente ligada à manipulação de dados e os modelos são responsáveis por esse nível de dados.
Utilizar modelos em sua capacidade total incentiva os controladores lean, controladores que estão mais focados em conectar os modelos às visualizações e vice-versa do que realmente implementar a lógica de negócios.
Práticas recomendadas com modelos
- Os modelos não devem usar variáveis vinculadas às entradas ou solicitações dos usuários finais. Isso deve ser deixado para o controlador passar para o modelo
- Evite incorporar código de apresentação no modelo. Isso ocorre porque o código de apresentação varia com base na entrada dos usuários finais, então isso deve ser deixado para a visão do MVC
Conclusão
Embora tenhamos usado o Sails como um exemplo de framework MVC para ver como usar o modelo em MVC em todo o seu potencial, esses princípios são agnósticos e devem ser aplicados ao framework MVC escolhido. Aqui estão as principais conclusões:
- Defina sua lógica de negócios em seus dados, como regras de validação, em seu modelo
- Defina a lógica que será executada em seu modelo que está dentro do modelo
- Faça com que seus controladores sejam enxutos
A postagem Não subestime o modelo em MVC apareceu primeiro no LogRocket Blog .