Bom pessoal, dando continuidade aqui, essa aula visa apenas passar algumas dicas, alguns detalhes que vocês devem prestar atenção para conseguir resolver o laboratório sem nenhum tipo de problema e ser bastante proveitoso, beleza? E eu já quero começar falando sobre a parte de requisitos funcionais, tá? Bom, este carinha aqui é dividido em duas partes específicas, que são elas, as Core Features e as Support Features. E o que é cada uma dessas Core e Support? Então, quando a gente está falando de Core Feature, ou seja, as funcionalidades principais durante uma entrevista de System Design, o que isso quer dizer? Quer dizer que ele está te perguntando acerca do coração do sistema, ou seja, quais são as funcionalidades que são essenciais para que o sistema atinja o objetivo proposto. Então, no caso da Netflix, quais são essas features que são denominadas o coração para ficar mais fácil até para que vocês consigam assimilar o que que é uma core feature e diferenciar de uma suporte feature logo mais eu vou fazer um exemplo com um e-commerce tá só para que vocês consigam ter aí essa divisão bem clara na cabeça de vocês. Bom, falando agora de Support Feature, nós temos aqui, são funcionalidades que complementam ou ajudam ou melhora a experiência do usuário ou, de certa forma, a eficiência daquela aplicação, daquele sistema, elas não são essenciais. Todavia, ela é muito importante porque vai melhorar, de certa forma, toda a experiência que o usuário vai ter na sua plataforma. Então, pensa que são funcionalidades, são requisitos de suporte que vão suportar para que a pessoa consiga chegar no coração do seu sistema, ou seja, utilizar o coração do seu sistema. Fechou? E para isso clarear, para ficar mais fácil, vamos pegar um exemplo de e-commerce. Se a gente fosse pensar em core features de um e-commerce, pense o seguinte, pessoal, o que um e-commerce tem que ter para ele funcionar? Sem isso, ele não é um e-commerce. Primeira coisa, ele tem que ter um catálogo de produto, não é mesmo? Porque eu preciso mostrar quais produtos eu estou vendendo. Sem isso, eu consigo fazer com que o meu e-commerce funcione? Muito provavelmente não. Segundo, será que tem mais alguma coisa o carrinho de compra né então eu preciso ter um carrinho de compra porque se eu quero comprar um único item ou vários itens eu tenho que passar pelo carrinho de compra aonde ele vai agrupar todos os itens ali necessários para que eu faça o que o pagamento afinal de contas eu estou lidando com e-commerce então pagamento ele tem que ser digital então pagamento online por exemplo né sem isso aqui muito provavelmente seu e-commerce ele não vai funcionar agora com isso aqui é certeiro que o e-commerce vai funcionar é claro que aqui eu listei apenas três né mas existem algumas outras, podem existir algumas outras ou algumas várias, assim como o nosso exemplo ali de streaming de vídeo. Mas a ideia aqui é que vocês compreendam e tentem imaginar qual é o objetivo principal. Para que você acessa a Netflix? Qual o objetivo? O que você faz quando você acessa? O que você quer? Qual o seu desejo? Façam essas perguntas aí no momento em que for definir as core features, beleza? Já as nossas features de suporte, a gente tem que pensar em coisas que vão nos dar suporte, ou seja, que vai complementar e de certa forma vai ajudar na experiência do usuário. Então pensando numa visão de e-commerce, o que poderia ajudar a experiência do meu usuário que vai complementar tudo isso aqui que a gente definiu como core feature até então. Por exemplo, a gente poderia ter aqui notificação de promoções. Então, eu preciso do meu catálogo de produto para a pessoa comprar. Mas e se, quando um produto entrar em promoção, eu criasse ali uma notificação que chegasse para a pessoa, por SMS, WhatsApp, e-mail, enfim, a depender do que ela assinar. Outra coisa que eu poderia colocar aqui seria o rastreamento de pedido. Imagina o seguinte, comprei, fui lá, escolhi o produto, liguei para o meu carrinho, comprei, paguei. E aí, como é que eu faço? É só esperar que algum momento vai chegar. Mas e se eu pudesse rastrear? Ficaria uma experiência muito melhor. Querendo ou não, é algo que complementa também. Vamos pensar aqui em mais uma pra gente finalizar. A gente pode ter aqui, por exemplo, um chat de atendimento, talvez. Por quê? Ah, tô querendo comprar ali, mas tô com dúvida em alguma coisa em específico, poderia utilizar o chat. Então repare que são funcionalidades que suportam para que o desejo do e-commerce seja cumprido. Quando o usuário está entrando lá, ele tem um desejo. Qual é o desejo? Comprar alguma coisa. Mas eu tenho dúvida, entro no chat. Se eu quero esperar alguma promoção, ativo as notificações. Se eu quero esperar alguma promoção, ativo as notificações. Se eu quero acompanhar o meu pedido, rastreio o meu pedido. Beleza? Entendido essa parte de requisitos funcionais, o que vocês vão ter que fazer então? Pensar e subdividir em Core Feature e Support Feature. No momento em que vocês forem listar aí os seus requisitos funcionais. Dica e detalhe muito importante. O que eu faria aqui? Eu quero que vocês definam o seu core feature e coloque aqui duas support features, por exemplo, e faça isso dentro do seu API design, modelagem de dados e system design. Perfeito? seu API design modelagem de dados e system design perfeito bom indo aqui para baixo temos a parte de plano de capacidade o plano de capacidade galera eu tenho aqui uma pequena dica é mais a nível de informação para você está vocês vão utilizar o que? Notação científica. Então, utilizem notação científica. O que é notação científica? Basicamente, é aquela parte onde a gente consegue retirar os zeros elevando uma potência. Então, 10 elevado a 3, por exemplo. 10 mil, 10 elevado a 4 e assim por diante. A 4, na verdade. Bom, pessoal, estamos continuando aqui. A gente pode fazer 100 mil, por exemplo. 10 elevado a 5ª potência e assim por diante. Fechou? Uma outra coisa que é importante que vocês notarem aqui é em relação a arredondamento. Então, caso vocês queiram utilizar, e eu recomendo fortemente que vocês utilizem, tá? Arredonde um dia para 100 mil segundos A gente entendeu Que 100 mil segundos É igual a 10 Elevado A quinta potência Sei que um dia Ele é igual a 86 mil E 400 Segundos Mas para efeito de cálculo pode utilizar 100 mil que não tem problema nenhum, tá? Vai inclusive ajudar aí o processo em si. Seguindo aqui eu queria dar algumas ideias sobre modelagem de dados, tá? O que vocês precisam se atentar, o que vocês precisam trazer aqui quando você vai modelar dados em um System Designer. Basicamente, você vai fazer o seguinte, pessoal. Criar aqui, ó, uma pequena entidadezinha. E aí, o que você vai fazer dentro da entidade? Você pode, sim, colocar a definição, né? Qual é essa entidade? Por exemplo, Product, pegando ali o cenário de e-commerce, ok? E vou ter aqui embaixo, por exemplo, o nome do produto, o preço dele, uma descrição e coisas nesse sentido. uma descrição e coisas nesse sentido. Tenta ser o mais sucinto possível, tá? Quer botar dado? Pode botar também, mas o aconselhável é nem colocar, pessoal. A importância aqui é, de fato, entender quais são os principais dados que a sua entidade deve ter. Os seus relacionamentos e coisas nesse sentido, tá? Se por ventura for utilizar, por exemplo, um enum ou uma chave estrangeira, aí é bacana, né, você fazer, por exemplo, chave FK, aí define aqui como for aqui ou um enum, por exemplo, status, a gente pode usar um enum aqui, ó, você coloca active ou inactive, coisas nesse sentido, que aí fica um pouco mais expressivo, né? A palavra-chave aqui é quanto mais você conseguir ser expressivo, melhor. E por que em alguns campos talvez não seja tão recomendado você colocar o tipo de dado em si, somente em situações bem específicas, né? Porque, por exemplo, a gente colocar aqui um id, aí eu posso definir que ele é um uid. E aí já pode cair aquela pergunta, mas por que o uid? Será que não pode ser uma string? Será que não pode ser um inteiro? E aí você teria que explicar qual foi o processo de decisão que você fez e tudo mais. Então, de suma, a suma aqui, você vai colocar só o que é necessário acerca de tipo de dado e vai se concentrar em trabalhar as informações da entidade em si, beleza? Bom, o sexto ponto aqui é o nosso em pi design inclusive deixa eu até pegar aqui nosso em pi design ele vai seguir muito a ideia do modelagem de dados copiar aqui para mostrar para vocês estão aqui o que costumo fazer eu dou um nome tá então por exemplo o nome vai ser create product pegando ali a idéia da nossa entidade acima tá então eu sei que pra criar um produto tá tem que fazer um barra post pra dentro de product e aí eu posso enviar algum dado aqui. Então, name, price, por exemplo, e description. E aí eu sei que eu vou receber um 201, por exemplo. Pronto, isso aqui é o suficiente. Existem situações que eventualmente você vai ter que definir uma resposta um pouco mais palpável Por quê? Porque vai ser situações onde você tem um search, por exemplo Onde você tem filtros e coisas nesse sentido Se você cair nessa situação, aí é muito interessante que você também seja um pouco mais expressivo Então, vou ter aqui o meu retorno xyz mas fora isso partes outras partes né pode se atentar somente a isso aqui que já é o suficiente e lembre-se sempre coloque só o necessário porque se você? Porque se você colocar alguma coisa, vai ser perguntado, vai ser aprofundado. E corre o risco de você não saber responder, o que não é um problema, tá? Você pode falar que não sabe, inclusive é bom que você fale que não sabe. Mas, quanto menos não sabe acontecer, melhor. Convenhamos, né? acontecer melhor convenhamos né e por fim a gente tem ali o sistema design em si que é a parte 7 do nosso desafio tá o sistema design em si pessoal eu recomendo que vocês primeiro vão lá no nosso módulo de sistema design de uma revisada analise como é feito tá tente colocar somente os componentes específicos que você abordou aqui dentro tá da modelagem de dados e API inclusive uma dica tá faça uma modelagem faça um design de API primeiro para depois fazer o System Design vai ficar muito mais fácil que você já vai entender quais são os dados quais são os serviços que você vai precisar, como que vai correr todo esse fluxo aí. E baseado em todo esse fluxo, aí sim você monta quais são os componentes, quais são os multidados, quais são as filas, vai ter API Gateway, não vai ter, enfim, vai montando aí de acordo com o necessário. de acordo com o necessário. Sobre definição de tecnologia, muito cuidado também. Você vai utilizar um banco de dados e ponto. Ou você pode colocar um banco de dados, por exemplo, com relacionamento, não relacional, ou um banco de dados não SQL. Não especifique, de fato, tecnologia. Ah, vou utilizar um MySQL, um banco de dados non-SQL. Não especifique de fato a tecnologia. Ah, vou utilizar um MySQL. Um banco de dados relacional MySQL. Ou um banco de dados non-SQL. Um MongoDB. Porque de novo cai naquela ideia de... Tudo bem. Por que essa decisão? E aí se aprofundar nisso e tal. Não é tão interessante assim. Beleza? É isso. Baseado em todas essas dicas. Agora chegou a sua vez. Então, o que você vai fazer? Aqui embaixo tem todo o nosso desafio já em formato de texto. Agora, leia, responda as perguntas, faça de acordo com o que nós definimos aqui, tá? E logo mais nós vamos entender aí como que se dá a resolução disso. Beleza, pessoal? Então, é isso aí. Um grande abraço e até a próxima.