Olá, estudante, tudo bem? Após conhecer o paradigma da orientação a objetos, incluindo herança e polimorfismo, nesta lição o objetivo é apresentar o Padrão MVC, suas camadas e o isolamento do database. O Padrão Model-View-Controller (MVC) é uma abordagem arquitetural amplamente utilizada na construção de aplicativos de software que se baseia na separação das preocupações e na organização modular do código, o que facilita a manutenção, escalabilidade e colaborações entre desenvolvedores. O MVC divide uma aplicação em três principais componentes interconectados: Model (Modelo), View (Visão) e Controller (Controlador). Quando se fala de isolamento do database ou banco de dados em português, a referência é direta para a camada de modelo que inclui entre outras coisas a interação com o banco de dados. Essa camada é a responsável por manter a integridade dos dados e garantir que eles estejam em conformidade com as regras definidas pela aplicação.
Pronto para aprender sobre o MVC e especialmente sua camada de Modelo? Vamos lá!
Um dos problemas que o padrão MCV resolve é a complexidade de interface. Imagine que você está desenvolvendo um aplicativo de gerenciamento de tarefas para equipes de projetos. Esse aplicativo precisa lidar com a criação, edição e exclusão de tarefas, bem como a exibição de informações sobre as tarefas concluídas e em andamento. À medida que o projeto evolui, você percebe que a interface do aplicativo está se tornando cada vez mais complexa, dificultando a manutenção e escalabilidade. É aqui que o padrão MVC entra em jogo para resolver esse problema, pois ao aplicar o padrão MVC, você pode resolver esse problema dividindo as preocupações em três componentes distintos:
Model (Modelo): Lógica de negócios e manipulação de dados do resto do aplicativo.
View (Visão): A interface do usuário é projetada para ser responsável apenas pela apresentação dos dados e interações com o usuário. Ela exibe as informações sobre as tarefas de maneira clara e organizada. As interações dos usuários são capturadas e enviadas para o Controller.
Controller (Controlador): Atua como um intermediário entre o Model e a View. Ele recebe as interações dos usuários provenientes da View, as processa e atualiza o Model conforme necessário.
O padrão MVC resolve o problema da complexidade de interface, dividindo as preocupações em camadas distintas e promovendo a organização e a modularização do código. Isso resulta em um aplicativo de gerenciamento de tarefas mais eficiente, flexível e de fácil manutenção, à medida que ele continua a crescer e evoluir.
Hoje, você irá conhecer o case sobre a empresa “TravelEase” que desenvolve um aplicativo de reserva de hotéis. A empresa tem o objetivo de criar uma plataforma onde os usuários possam pesquisar, visualizar e reservar acomodações em todo o mundo. O aplicativo deve lidar com uma grande quantidade de dados, incluindo informações detalhadas sobre hotéis, disponibilidade de quartos e preços.
No início do desenvolvimento, a equipe da TravelEase construiu o aplicativo sem a separação adequada das camadas e com uma lógica de banco de dados diretamente incorporada na interface do usuário. Isso resultou em um código complexo e difícil de manter. Qualquer alteração nos detalhes do banco de dados afetava diretamente a interface do usuário, causando confusão e a necessidade de ajustes frequentes em todo o aplicativo. Sendo assim, a equipe da TravelEase decidiu adotar o Padrão MVC para resolver os problemas de complexidade e manutenção.
A equipe reorganizou o aplicativo em três principais componentes interconectados: Model, View e Controller, onde a camada de Model passou a ser responsável pela interação com o banco de dados. Encapsulando as consultas, atualizações e operações relacionadas aos dados do hotel. A equipe criou um conjunto de métodos para buscar detalhes de hotéis, verificar disponibilidade de quartos e atualizar as reservas. Com isso, mesmo o case sendo fictício, pode-se entender a importância do isolamento do banco de dados dentro do Model, pois a empresa TravelEase conseguiu com isso a manutenção simplificada, segurança e integridade dos dados e futuramente a escalabilidade. Tudo isso ressalta a necessidade e a importância da utilização do padrão MVC.
O padrão Model-View-Controller, comumente abreviado como MVC, é um dos conceitos fundamentais e mais usados na programação, segundo Dall'oglio (2018) ele é um design pattern que está entre os mais conhecidos. Seus conceitos remontam à plataforma Smaltalk na década de 1970, e ele é usado especialmente na construção de aplicativos e sistemas complexos. Criado para promover uma separação clara de preocupações e melhorar a estrutura e organização, o MVC é amplamente utilizado para desenvolver interfaces de usuário interativas, sistemas web e aplicativos de software de maneira geral, eficiente e escalável.
O MVC é mais do que apenas um padrão de design (design pattern, em inglês), é uma filosofia que orienta as pessoas desenvolvedoras a dividir a lógica de um programa em três componentes interligados: o Modelo (Model), a Visão (View) e o Controlador (Controller). Cada um desses componentes desempenha um papel crucial na definição, exibição e manipulação dos dados, garantindo uma estrutura organizada e facilmente compreensível.
O Modelo é responsável por gerenciar os dados e a lógica de negócios. Ele representa o estado e o comportamento da aplicação, interage com o banco de dados e executa as operações necessárias nos dados. A Visão, por sua vez, cuida da apresentação dos dados aos usuários. Ela cria uma interface visual que os usuários interagem e visualizam, garantindo que as informações sejam exibidas de maneira clara e atraente. No centro do MVC, está o Controlador, que atua como um intermediário vital entre o Modelo e a Visão. Ele recebe as entradas dos usuários, processa as solicitações, interage com o Modelo para recuperar ou atualizar dados e, em seguida, instrui a Visão sobre como exibir esses dados atualizados.
Essa separação de responsabilidades permite que os componentes sejam modificados ou substituídos sem afetar o funcionamento dos outros. Outro ponto importante a se saber é que, ao adotar o padrão MVC, os desenvolvedores podem criar aplicações mais organizadas, manuteníveis e expansíveis. O código se torna mais modular, facilitando a colaboração entre membros da equipe, a depuração de erros e a adição de novos recursos. Em resumo, o MVC é uma ferramenta poderosa que ajuda os programadores a enfrentar os desafios de projetos complexos, oferecendo uma estrutura sólida para desenvolvimento de software eficiente e de alta qualidade.
Chegou então o momento de detalhar cada uma das camadas do padrão MVC, assim como algumas regras de comportamento interessantes que você deve seguir ao adotar tal padrão. Dall'oglio (2018) nos esclarece que a intenção principal ao utilizarmos o MVC é não misturar em uma mesma classe responsabilidades diferentes. Portanto, vamos entender qual a responsabilidade das classes em cada uma das camadas do padrão.
Uma classe de modelo representa as informações do domínio de negócios da aplicação. Essa classe tem como responsabilidades manter as informações de negócio e implementar métodos que representem as regras de negócio do domínio. É importante que você entenda que, quando falo “domínio de negócios da aplicação”, me refiro à área de conhecimento, setor ou indústria na qual a aplicação está focada. Ele engloba todos os aspectos e atividades relacionados àquela área específica em que a aplicação será usada para atender às necessidades dos usuários e resolver problemas específicos.
O entendimento profundo do domínio de negócios é fundamental para o desenvolvimento bem-sucedido de uma aplicação. Isso porque uma aplicação eficaz não precisa apenas atender aos requisitos técnicos, mas também compreender as regras, processos e fluxos de trabalho específicos do setor ou indústria.
Mas, quais as responsabilidades das classes desta camada de Model?
São classes responsáveis por gerenciar os dados e a lógica de negócios do sistema. Portanto, é onde as operações e regras de negócio são definidas, bem como o acesso e a manipulação dos dados. A seguir, estão alguns tipos de classe que podem ser considerados e utilizados nesta referida camada:
Entidades ou Objetos de domínio: Essas classes representam as principais entidades ou objetos do domínio de negócios da aplicação. Elas encapsulam os dados e comportamentos relevantes para essas entidades. Por exemplo, em um sistema de gerenciamento de biblioteca, as classes "Livro" e "Usuário" seriam entidades de domínio.
Classes de acesso a dados (DAO - Data Access Objects): As classes DAO são responsáveis por interagir com a fonte de dados (geralmente um banco de dados). Elas encapsulam a lógica para recuperar, salvar, atualizar e excluir dados. Isso ajuda a separar a lógica de negócios da camada de acesso a dados, facilitando a manutenção e a flexibilidade.
Serviços de negócios: Classes de serviços de negócios implementam operações complexas que envolvem várias entidades ou lógica de processamento. Elas podem executar cálculos, validações e coordenação de várias operações de banco de dados.
Classes de validação: Essas classes são usadas para validar os dados antes de serem persistidos ou processados. Elas garantem que os dados estejam corretos e consistentes de acordo com as regras do domínio.
Classes de processamento: Se a aplicação tiver processos de negócios complexos, você pode criar classes que representam esses processos. Por exemplo, em um sistema de compras online, uma classe de "Processo de Compra" pode lidar com a lógica de seleção de produtos, cálculo de preços, geração de faturas etc.
Classes de notificação e observação: Classes que gerenciam notificações e observações podem ser usadas para manter os componentes da aplicação atualizados sobre as mudanças nos dados. Isso é, particularmente, útil em sistemas em tempo real.
Classes de configuração e parametrização: Se a aplicação precisar de configurações ou parâmetros, você pode criar classes para gerenciá-los. Isso permite uma maneira centralizada e flexível de gerenciar opções de configuração.
Uma classe de visualização representa a fronteira (interface) da aplicação com seu usuário. Essa classe tem como responsabilidade a apresentação e a obtenção de dados ao usuário. Ela define, entre outras coisas, como os campos serão apresentados na tela e não devem conter lógica de negócios. A seguir, estão algumas das tecnologias frequentemente usadas na camada de View:
HTML (Hypertext Markup Language): HTML é a linguagem padrão para criar páginas web. Ela é usada para estruturar o conteúdo, definir elementos como texto, imagens, links e formulários. Juntamente com o CSS e JavaScript, o HTML forma a base da maioria das interfaces de usuário na web.
CSS (Cascading Style Sheets): usado para controlar o estilo e a aparência dos elementos HTML. Ele permite definir cores, fontes, margens, posicionamento e outros aspectos visuais de uma página web.
JavaScript: uma linguagem de programação de script amplamente usada para adicionar interatividade e dinamismo às páginas web. Com JavaScript, você pode responder a eventos, manipular elementos da página e atualizar o conteúdo sem recarregar a página inteira.
Frameworks em geral: React e JSX, Angular, Vue.js, SwiftUI, Flutter e Dart.
Essas são apenas algumas das tecnologias que podem ser usadas na camada de View, dependendo da plataforma e das necessidades da aplicação. A escolha delas depende dos requisitos do projeto, das habilidades da equipe de desenvolvimento e da melhor adequação à plataforma de destino.
Uma classe de controle recebe dados e ações do usuário, interpreta essas ações e executa tarefas correspondentes. Sua utilização clássica é quando uma classe Controller recebe da View um conjunto de dados e uma ação solicitando a sua atualização no banco de dados. Esse controller aciona a camada Model, que por sua vez executa a “ordem”. Na sequência, ele aciona a View para apresentar os resultados ao usuário.
Uma analogia muito utilizada para explicar a camada de controller é compará-la a função de um garçom em um restaurante. Assim como um garçom atua como intermediário entre os clientes e a cozinha, o Controller age como um intermediário entre a camada de Model e a camada de View. O garçom recebe os pedidos dos clientes, repassa-os à cozinha, e, quando a comida está pronta, entrega-a de volta aos clientes. Da mesma forma, o Controller recebe as solicitações dos usuários, processa-as, interage com o Model para obter ou manipular dados, e então passa as informações necessárias para a View exibir os resultados de volta aos usuários.
Essa analogia ilustra como a camada de Controller desempenha um papel vital na coordenação e no gerenciamento das operações entre as outras duas camadas, garantindo uma experiência suave e eficaz para os usuários.
Ao definir o padrão MVC em sua aplicação, você deve tomar alguns cuidados segundo Dall'oglio (2018):
Uma classe de modelo não deve emitir mensagens ao usuário por meio de comandos como print, muito menos gerar mensagens contendo marcações HTML. Exibir informações ao usuário por meio de uma linguagem de marcação é uma tarefa de uma classe de visualização.
Uma classe de controle não deve executar diretamente comandos de acesso a dados como SQL (Linguagem de consulta estruturada em português). Buscar e atualizar dados relativos ao modelo de domínio são tarefas de uma classe de modelo.
Uma classe de visualização não deve conter regras de negócio, nem decidir o que deve ser executado em determinado momento. Regras de negócio são de responsabilidade de uma classe de modelo, e decidir o que deve ser executado é de responsabilidade de uma classe de controle.
Em resumo, podemos dizer que o conhecimento sobre o padrão MVC é importante para criar aplicativos de software bem organizados, de fácil manutenção e escaláveis, o que é essencial na indústria de desenvolvimento de software.
As pessoas que atuam na área de desenvolvimento de sistemas, incluindo você, enquanto técnico(a), precisam saber sobre o padrão MVC devido a sua importância na organização do código. O MVC separa as responsabilidades em camadas distintas, tornando o desenvolvimento mais eficiente e facilitando sua manutenção, sem contar que a divisão de tarefas que a MVC proporciona a reutilização do código e escalabilidade.
Além disso, é importante que você saiba que o padrão MVC é muito utilizado na indústria de desenvolvimento de software, sendo assim, conhecer sobre ele facilita a comunicação e colaboração entre outros desenvolvedores. Assim, o conhecimento do MVC é essencial para criar sistemas de alta qualidade e atender às demandas da indústria de tecnologia.
Com o intuito de fixar as características do padrão MVC, aplicar hoje é um pouco diferente. Você irá criar uma apresentação usando qualquer ferramenta de slide que conheça com as seguintes características:
Imagine que irá apresentar isso em um processo de recrutamento para uma vaga que você queira muito.
Revise o conteúdo da lição sobre MVC para relembrar seus conceitos.
Identifique os elementos principais do MVC: Model, View e Controller.
Crie três slides separados, um para cada componente MVC: Model, View e Controller.
Cada slide deve ter um título (Model, View, Controller) e uma breve descrição do que cada componente faz.
Slide do Model
Descreva o Model como a camada que lida com os dados e a lógica de negócios.
Use um exemplo simples, como um aplicativo de lista de tarefas, para mostrar como o Model gerencia os dados, como as tarefas a serem feitas.
Slide da View
Explique que a View lida com a apresentação dos dados aos usuários.
Mostre uma captura de tela de um aplicativo com a interface do usuário, destacando onde os dados são exibidos.
Slide do Controller
Descreva o Controller como o intermediário entre o Model e a View.
Use o exemplo da lista de tarefas para explicar como o Controller processa as ações do usuário, como adicionar ou marcar tarefas como concluídas.
Crie um slide adicional para um exemplo de framework que utiliza MVC.
Faça uma pesquisa sobre algum framework da linguagem que você tenha mais afinidade e que use o padrão MVC e de um exemplo de como ele seria utilizado usando esta plataforma.
Essa abordagem permitirá entender melhor e aplicar seus conhecimentos com o intuito de explicar o conceito de MVC de maneira clara e envolvente, usando exemplos simples e interativos. Além de você já criar um material que poderá publicar em suas redes sociais para ensinar seus colegas sobre algo novo que você aprendeu. Estou curioso para saber o que você irá fazer. Compartilhe comigo!
DALL'OGLIO, P. PHP Programando com orientação a objetos. 4 ed. São Paulo: Novatec, 2018.