[Música] Olá sejam bem-vindos ao canal engenharia de software com ênfase uml Eu sou professor ganes Guedes e eu já T na área de modelagem de software há vários anos eu tenho quatro livos publicados sobre o assunto e eu já ministrei diversas palestras e cursos técnicos sobre modelagem de software com a linguagem uml na aula de hoje eu pretendo apresentar os padrões rosit e Dal que são bastante úteis para a persistência de objetos Então vamos dar início ao nosso conteúdo bom eu gosto Seme fazer uma pequena propaganda eu já publiquei quatro livros sobre o ML o
meu primeiro livro foi o ML uma abordagem prática que na época trabalhava com Mia 1.5 mas que abordava m do no final do livro depois eu lancei um livro exclusivo sobre sobre o ml2 que foi o guia de consulta rápida Poucos Anos depois eu transformei esse guia num livro mais completo que foi o MR2 via prática e depois eu lancei o meu livro mais completo que é o m2 uma abordagem prática que se encontra na terceira Edição Mas vamos ao conteúdo então como eu falei eu vou falar sobre os padrões repository e Down então quando
nós trabalhamos com modo de modelo deve se inserir nasas Entidade os comportamentos relativos à lógica do negócio somente esses comportamentos Relembrando o módulo de modelo é um módulo que contém as classes de entidade isso quando se utiliza a arquitetura mvc e arquiteturas assemelhadas Então as classes entidades são classes relacionadas diretamente ao domínio do problema essas classes normalmente vão ter muitos objetos esses objetos muitas vezes serão deverão ser persistidos E essas classes entidad conterão a lógica do negócio a lógica relativa às funcionalidades associadas diretamente ao domínio do problema que se está tentando solucionar ah porém embora
o módulo de modelo contenha as classes de entidade e elas normalmente sejam classes persistentes a forma como essas como os objetos dessas classes precisarão ser persistidos não faz parte do objetivo do moddo de modelo eh um consenso geral que Inserir a questões relativas ao acesso a dados a persistência dos objetos recuperação desses objetos dentro das classes identidade não é uma boa decisão de projeto então muitas vezes se recomenda que se crie um novo modo ou camada dependendo da arquitetura utilizada e ser responsável pela persistência e recuperação dos objetos das classes de entidade bom ah na
verdade o padrão repository não é realmente um padrão de persistência uma vez que ele gerencia coleções de objetos em memória mas ele está bastante associado à ência de objetos como nós vamos ver então ah o padrão repository ele tem como objetivo abstrair questões que estejam relacionadas à à manipulação de banco de dados como conexões gravação e recuperação de dados em disco então o padrão repository ele tenta manter o módulo de modelo sem ter conhecimento sobre como seus objetos serão persis ele então separa a lógica de acesso a dados da lógica da aplicação da lógica do
negócio bom eh então Eh Na verdade o padrão repository ele serve de intermediário entre o módulo de modelo e o módulo de persistência ã na verdade as instâncias das classes de repository elas gerenciam coleções de objetos em memória memória RAM e em geral essas coleções elas são referentes a uma determinada classe da entidade Então na verdade o padrão repository ele não persiste objetos uma vez que persistência implica em gravação em disco ou nuvem ã mas ele gerencia coleções de objetos de uma determinada classe de entidade e memória eh a vantagem disso é a rapidez da
aplicação porque acesso a disco costuma deixar o software mais lento uma vez que o acesso a disco é uma das operações que mais lentas do de uma de um software Então as clas de repository elas gerenciam eh coleções de objetos e memória e elas somente quando elas acham necessário elas solicitam a persistência dessas coleções em disco como a gente vai estudar daqui a pouco Ah então as classes lipos elas contêm operações ou seja métodos que podem ser realizadas sobre essas coleções de objetos basicamente as operações elas permitem adicionar remover a atualizar elementos e também selecionar
um ou diversos elementos da coleção na verdade as classes repositor elas pertencem ao módulo de modelo porém em geral elas são representadas em um pacote dentro do pacote de modelo como a gente vai ver quando a gente estudar o diagrama de pacotes Ahã Então as classes de repositório elas armazenam excluem atualizam e consultam objetos na coleção que elas são responsáveis eh e quando é necessário elas fazem solicitações ao modo de persistência para gravar excluir ou retornar informações da base de dados da base física de dados então eh a forma mais simples de projetar classe repositório
é criar uma classe repository para cada classe de entidade e definir na classe repository os métodos específicos para a manipulação da coleção desses objetos porém nós devemos lembrar que nem sempre uma classe de entidade vai ter seu equivalente em uma classe eh em uma tabela relacional por exemplo como a gente já estudou em outros vídeos anteriores então não necessariamente vai vai haver uma classe repository para cada classe de entidade isso é particularmente verdadeiro quando se trabalha com hierarquia de classes Como já foi visto anteriormente Ah também é possível criar uma classe de interface genérica e
a partir dela eh criar várias classes que realizem os seus métodos para manipulação da coleção dos objetos Aqui nós temos um exemplo de classe repository Então à esquerda nós temos uma classe de entidade que é a classe conta comum do Sistema de Controle bancário que nós temos modelado e à direita nós temos a classe repositório conta então essa classe ela contém uma Ray list que basicamente é um vetor dinâmico em Java de objetos da classe conta comum ou seja a coleção de objetos e ela possui métodos ou operações para inserir objetos nessa coleção retornar objetos
dessa dessa co e atualizar objetos nessa coleção Como já foi falado ah a classe repository ela trabalha em memória ela manipula uma coleção de objetos em memória ela não persiste esses objetos propriamente ditos não ela não persiste esses objetos ela própria ela faz solicitação a classes da quando achar necessário bom então nós vamos estudar agora o padrão da D significa date access Object ou objeto de acesso a dados ã Como já falei antes as clas repositório pertence ao módulo de modelo e somente gerenciam coleções de objetos de uma classe entidade na memória RAM as classes
repository na verdade elas não têm conhecimento real sobre a infraestrutura dos bancos de dados do banco de dados que está sendo utilizada pelo software em questão Ahã já o padrão da ele representa classes osos objetos estão relacionados à infraestrutura da aplicação ou seja o banco de dados ã as classes da elas não fazem parte do módulo de modelo elas fazem parte do mdulo ou camada dependendo da arquitetura dotada de persistência então é as classes da elas encapsulam os detalhes como os dados serão persistidos em disco o ou na nuvem Ah pode ser necessário e útil
utilizar os dois padrões o repository e o Down ah por quê Porque o repository uma vez que gerencia coleções de objetos memória pode deixar a aplicação mais rápida Ele só faz solicitação de persistência quando considera necessário ã então se nós utilizarmos os dois padrões o mdulo de modelo ele faz solicitações e armazena objetos em um repositório e o e o repositório quando considerar necessário faz solicitações a o objeto Dal que é o que tem conhecimento sobre a estrutura de dados utilizada para h persistir ou recuperar informações do banco de dados então a da ela traduz
as chamadas persistência de uma de um repository em chamadas adequadas à estrutura de dados que está sendo utilizado Ahã então isso permite uma Independência entre os mfos e em situações em que a infraestrutura da do banco de dados precisar ser modificado as alterações só precisarão ser feitas nas classes da as classes repository e as classes entidade não precisam ser alteradas ah em geral as chamadas das classes da Elas costumam ser genéricas como update delete e select chamadas para inserir atualizar apagar e selecionar objetos na base de dados Aqui nós temos o exemplo de classe D
aqui nós à esquerda nós temos uma classe entidade no centro nós temos uma classe do repositório e à direita nós temos uma classe da uma classe de objeto de acesso a que é responsável pela persistência dos objetos mantidos na coleção da classe repositório Conta essa coleção é formada por objetos da classe entidade conta comum na verdade esse exemplo não está totalmente correto uma vez que classes da e classe repository estão em módulos ou camadas diferentes eh nesse Exemplo foi apenas utilizado para para ilustrar a ligação entre as classes Dal a as classes de repositório e
as classes de entidade Como já foi falado antes as classes repositório costumam servir de intermédio entre as classes de entidade e as classes dal é possível que uma classe deid entidade trabalhe diretamente com uma classe Dal também mas isso pode fazer com que o número de acesso a disco seja maior tornando o software um pouco mais lento Aqui nós temos exemplo do padrão Dal onde ele é formado por quatro classes a classe Business Object a classe data access Object a classe data sece e a classe transfer Object a classe todas as classes vão ser detalhados
mais a seguir mas basicamente a classe Business Object ela não existe realmente ela vai ser substituída por uma classe de entidade ou se nós estivermos utilizando também o padrão repositório por uma classe repository eh Então ela contém objetos eh relacionados ao domínio do problema objetos de classe de entidade a a classe data access Object é a classe que encapsula as a lógica para persistência de dados Então ela é utilizada por instâncias da classe de da classe Business Object e a classe data sece também não existe realmente no mundo real ela representa uma fonte de dados
física que é utilizada pela data access Object para persistir os objetos que ela tem responsabilidade e a classe transfer Object é uma classe temporária é uma classe com os objetos são temporários que são utilizados durante o processo de persistência então ah objetos da classe data access Object eles criam e usam objetos da classe transfer Object e objetos da classe Business Object obtém e modificam objetos dessa classe então V falar um pouquinho com mais detalhes sobre cada uma dessas classes iniciando pela Business Object essa classe ela é uma classe de entidade ou no caso uma classe
repositório se nós estivermos utilizando também o padrão reposit e essa essa classe de entidade ela contém a lógica do negócio está contida nos seus métodos os objetos da classe bu Object eles contm os dados que precisam ser transmi tios e recuperados da base de dados então a a classe Object Ela utiliza a classe data access Object para persistir e recuperar as informações de seus objetos Lembrando que a classe Business Object pode ser uma classe repository se for utilizado o padrão repository em conjunto com padrão bom Eu acabei de falar sobre isso né o padrão repository
com o Dal com o padrão da a classe repository ele serve de intermediária da classe Business Object ã como também já falei a classe Business Object não é uma classe real porque ela representa um conceito que é utilizado pelo padrão então na no momento de implementação desse padrão a essa a classe Business Object será representada por uma classe de repositório ou uma classe de entidade dependendo se nós estamos utilizando o padrão repository em conjunto com o padrão d ou não a classe data access Object é a classe da propriamente dita ela que encapsula todo o
acesso a dados eh e cada Instância dessa classe é responsável por um objeto domínio ou seja uma Instância de uma classe de entidade então H as classes da elas também incorporam os mapeamentos entre as classes de tabela que já foi estudado nos vídeos anteriores nós já explicamos em dois vídeos anteriores como fazer matamento de classe da entidade em tabelas relacionais ã então a com relação da classe data search ela representa origem de dados também não é uma classe real mas ela Ahã a classe data sece ela representa qualquer tipo de repositório físico utilizado pela classe
D que pode ser um banco de dados relacional ou um arquivo de texto Dependendo da forma como é feita a persistência no no software e como já foi falado a classe D ela encapsula essa fonte de dados finalmente a classe transfer Object ela representa objetos intermediários que são necessários para o processo de persistência e Recuperação de informações Ahã Então sempre que for necessário recuperar informações de um objeto de entidade ou persistir um objeto de entidade na fonte de dados então a classe da precisar criar um objeto dessa classe então a classe da ela cria e
utiliza esses objetos e a classe bu Object obtém ou modifica as informações desses objetos ao longo do processo de persistência Isso vai ser detalhado quando nós entrarmos no diagrama de sequência Aqui nós temos um exemplo de aplicação do padrão da como nós estamos utilizando o padrão reposit em conjunto com padrão Dal nós Ah o padrão a classe Business Object é representada pela classe repositório conta que já foi explicada no início desse vídeo ah a classe D no caso para a persistência de objetos da classe conta comum foi chamada de conta Dal e ela encapsula a
tabela conta comum que mapeou a classe de entidade conta comum e nós temos uma classe chamada conta transferência que representa os objetos de transferência que são utilizados pela pelas instâncias da conta Dal e pelas instâncias da classe repositório conta então como nós podemos ver nesse diagrama a h uma Instância da conta da ela cria e usa objetos de conta transferência e e instâncias da classe repositório obtém e modificam objetos dessa classe de acordo com o processo de persistência Então é isso nós concluímos a aula sobre os padrões repository e d eu espero que essa aula
tenha sido útil agradeço a atenção de todos e se vocês gostaram do vídeo eu Solicito que vocês ah de like E compartilhe esse conteúdo obrigado pela atenção