O documento apresenta os princípios do SOLID na programação orientada a objetos. Resume os cinco princípios SOLID: 1) responsabilidade única; 2) aberto-fechado; 3) substituição de Liskov; 4) segregação de interface; 5) inversão de dependência. Fornece exemplos de violações destes princípios e soluções para corrigi-los.
Test-Driven Development e sua influência no designMaurício Aniche
O documento discute como o Test-Driven Development (TDD) influencia positivamente o design de software através de três frases: TDD guia o design de software por meio de testes automatizados escritos antes do código de produção e usados para dirigir a implementação de pequenas funcionalidades de cada vez; à medida que os testes expõem problemas de design, eles também fornecem feedback para refatorar e melhorar continuamente o código e os testes; dessa forma, TDD ajuda a evitar designs complexos e acoplados.
Jorge Oleques é um desenvolvedor de software com experiência em PHP e Java. Ele possui graduação em Análise e Desenvolvimento de Sistemas e está cursando pós-graduação em Engenharia de Software. O documento fornece detalhes sobre sua formação acadêmica e experiência profissional, além de contatos como e-mail, Twitter, blog e GitHub.
O documento resume alguns padrões de projeto comumente usados na programação de jogos, como Command, Flyweight, Observer, Prototype, States e Singleton. Ele também discute brevemente outros padrões como Double Buffer, Game Loop, Update Method e Component e fornece referências adicionais sobre design de jogos.
Android DevConference - Live code with Kotlin: construindo o primeiro app usa...iMasters
Filipe Guedes e Philipe Steiff, 99 Taxi, falam sobre Live code with Kotlin: construindo o primeiro app usando Kotlin no Android DevConference 2016. Saiba mais em: http://androidconference.com.br/
Android DevConference - Refactoring for RxJavaiMasters
O documento discute como refatorar um projeto para usar RxJava. Primeiro, ele explica as motivações para usar RxJava e algumas das suas funcionalidades. Depois, apresenta exemplos de como transformar código assíncrono existente em código reativo usando RxJava. Por fim, discute considerações sobre evoluir a arquitetura do projeto para aproveitar melhor os benefícios de RxJava.
Android DevConference - Indo além com automação de testes de apps AndroidiMasters
Eduardo Carrara, fala sobre Indo além com automação de testes de apps Android no Android DevConference 2016. Saiba mais em: http://androidconference.com.br/
1) O documento discute princípios de código limpo, incluindo nomes significativos, única responsabilidade de métodos e funções, e estruturas de decisão claras.
2) É enfatizado o uso de nomes que revelem a intenção do código, métodos com única responsabilidade e o retorno de exceções ao invés de valores especiais.
3) Exemplos mostram como refatorar código para seguir esses princípios de código limpo.
Test-Driven Development e sua influência no designMaurício Aniche
O documento discute como o Test-Driven Development (TDD) influencia positivamente o design de software através de três frases: TDD guia o design de software por meio de testes automatizados escritos antes do código de produção e usados para dirigir a implementação de pequenas funcionalidades de cada vez; à medida que os testes expõem problemas de design, eles também fornecem feedback para refatorar e melhorar continuamente o código e os testes; dessa forma, TDD ajuda a evitar designs complexos e acoplados.
Jorge Oleques é um desenvolvedor de software com experiência em PHP e Java. Ele possui graduação em Análise e Desenvolvimento de Sistemas e está cursando pós-graduação em Engenharia de Software. O documento fornece detalhes sobre sua formação acadêmica e experiência profissional, além de contatos como e-mail, Twitter, blog e GitHub.
O documento resume alguns padrões de projeto comumente usados na programação de jogos, como Command, Flyweight, Observer, Prototype, States e Singleton. Ele também discute brevemente outros padrões como Double Buffer, Game Loop, Update Method e Component e fornece referências adicionais sobre design de jogos.
Android DevConference - Live code with Kotlin: construindo o primeiro app usa...iMasters
Filipe Guedes e Philipe Steiff, 99 Taxi, falam sobre Live code with Kotlin: construindo o primeiro app usando Kotlin no Android DevConference 2016. Saiba mais em: http://androidconference.com.br/
Android DevConference - Refactoring for RxJavaiMasters
O documento discute como refatorar um projeto para usar RxJava. Primeiro, ele explica as motivações para usar RxJava e algumas das suas funcionalidades. Depois, apresenta exemplos de como transformar código assíncrono existente em código reativo usando RxJava. Por fim, discute considerações sobre evoluir a arquitetura do projeto para aproveitar melhor os benefícios de RxJava.
Android DevConference - Indo além com automação de testes de apps AndroidiMasters
Eduardo Carrara, fala sobre Indo além com automação de testes de apps Android no Android DevConference 2016. Saiba mais em: http://androidconference.com.br/
1) O documento discute princípios de código limpo, incluindo nomes significativos, única responsabilidade de métodos e funções, e estruturas de decisão claras.
2) É enfatizado o uso de nomes que revelem a intenção do código, métodos com única responsabilidade e o retorno de exceções ao invés de valores especiais.
3) Exemplos mostram como refatorar código para seguir esses princípios de código limpo.
Combatendo code smells em aplicações JavaEmmanuel Neri
Em busca de qualidade em aplicações Java, a apresentação tem como objetivo combater code smells com técnicas de clean code, SOLID, entre outros.
Apresentação TDC São Paulo 2017, trilha de Java
O documento apresenta informações sobre dois desenvolvedores - Maurício Andreazza Sganderla e Jorge Oleques - e aborda o tema de Test Driven Development (TDD) com dicas sobre como aplicá-lo de forma correta.
O documento discute a evolução de frameworks Java como Struts para CDI e VRaptor, e como implementar injeção de dependência e escopo de requisição com CDI. Também apresenta uma abordagem para integrar VRaptor e Struts em uma mesma aplicação.
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
O documento descreve como utilizar CDI (Contexts and Dependency Injection) em projetos Java para injeção de dependências, gerenciamento do ciclo de vida de objetos e desacoplamento de classes. CDI permite especificar dependências usando anotações como @Inject e @Produces e controla a criação e injeção desses objetos.
Palestra TDC SP 2018 / atualização InovaBRA: Nesta palestra, vamos apresentar o Flutter, o SDK de desenvolvimento multiplataforma do Google para criação de apps com performance de app nativo e visual atrativo, além de mostrar, na prática, os aplicativos gerados para as duas plataformas a partir de um único código fonte. Falaremos ainda da experiência de um trabalho conjunto de desenvolvedores Android e iOS na criação de um app que foi destaque no Google I/O.
O documento apresenta Flutter, um framework multiplataforma do Google para desenvolvimento de aplicativos. Ele resume os principais pontos sobre a arquitetura, widgets, integração com código nativo, geração de versões e um caso de uso com o aplicativo VivaBem do UOL.
O documento discute o uso do CDI (Contexts and Dependency Injection) em projetos Java, apresentando seus principais benefícios como injeção de dependências, separação de responsabilidades e inversão de controle. O CDI permite definir dependências entre classes de forma declarativa usando anotações como @Inject.
O documento apresenta Flutter, um framework multiplataforma do Google para desenvolvimento de aplicativos. Ele discute a arquitetura, widgets, internacionalização e integração com código nativo em Flutter, além de mostrar um caso de uso para o desenvolvimento de um aplicativo para o UOL VivaBem.
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaotdc-globalcode
O documento apresenta Flutter, um framework multiplataforma do Google para desenvolvimento de aplicativos. Ele discute como Flutter funciona, demonstra a construção de uma interface com widgets, explica a integração com código nativo e geração de versões, e apresenta um caso de uso com o aplicativo VivaBem do UOL.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
O documento apresenta um resumo sobre padrões de projeto. Discute classificação de padrões, exemplos de Factory Method, Decorator, Observer e Strategy. Também aborda princípios SOLID e anti-padrões.
Talk que aborda alguns pontos da programação como SOLID, STUPID, clean code, object calisthenics, composer e algumas dicas pessoais.
Feita para o flisol 2017.
Twig é uma linguagem de template para PHP que permite separar a lógica da apresentação. Ela oferece recursos como loops, condicionais, herança de templates, macros e filtros para formatação de dados. Sua sintaxe limpa e expressiva facilita a manutenção e legibilidade do código da view.
O documento descreve como desenvolver aplicativos para Android, incluindo como instalar as ferramentas necessárias como Java, Eclipse, SDK do Android e como criar um projeto simples de pesquisa chamado "Gugol" com uma interface gráfica e funcionalidade de pesquisa.
Aqui são apresentados as técnicas de Desenvolvimento Ágil: eXtreme Programming. Simples e prático.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute técnicas e boas práticas para lidar com código legado, como versionamento, testes, organização do código e programação orientada a objetos. Algumas das técnicas discutidas incluem utilizar ferramentas como Git para versionamento, Composer para gerenciamento de pacotes, PHPUnit e SimpleTest para testes, EditorConfig para padronização de estilos e CodeSniffer para análises estáticas. O documento também apresenta a técnica de "Programação Calistênica" para melhorar o design do código.
Spring Web MVC é um framework flexível e sofisticado para desenvolvimento de aplicações web em Java seguindo o padrão MVC. Ele oferece recursos como mapeamento de requisições, injeção de dependência, validação, tratamento de exceções e suporte a REST entre outros.
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
O documento discute injeção de dependência com o framework Unity. Ele explica os princípios da inversão de dependência e como Unity permite diferentes tipos de injeção como constructor, property e method call injection. Também mostra como configurar dependências no Unity e realizar testes utilizando mocks.
Este documento fornece instruções passo-a-passo para criar um aplicativo móvel simples em Android usando Java. Ele explica como criar a interface do usuário, recuperar dados e adicionar funcionalidade de clique em itens de lista.
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
1. O documento apresenta os principais modelos de bancos de dados NoSQL: chave-valor (Redis), orientado a documentos (MongoDB), orientado a colunas (Cassandra) e orientado a grafos (Neo4j).
2. Nos modelos orientados a documentos e colunas, o documento discute quando usar dados embutidos versus referenciados, enquanto no modelo de grafos destaca a importância dos nós e relacionamentos.
3. O documento fornece dicas sobre modelagem de dados em cada modelo, incluindo tipos de dados, índices
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
O PostgreSQL começou a ser desenvolvido em 1986 e tem ganhado bastante destaque nos últimos anos, como o banco de dados que mais cresce no mercado. Conheça as vantagens e desvantagens em se utilizar o banco de dados Open Source mais avançado do mundo.
Mais conteúdo relacionado
Semelhante a Android DevConference - SOLID no Android
Combatendo code smells em aplicações JavaEmmanuel Neri
Em busca de qualidade em aplicações Java, a apresentação tem como objetivo combater code smells com técnicas de clean code, SOLID, entre outros.
Apresentação TDC São Paulo 2017, trilha de Java
O documento apresenta informações sobre dois desenvolvedores - Maurício Andreazza Sganderla e Jorge Oleques - e aborda o tema de Test Driven Development (TDD) com dicas sobre como aplicá-lo de forma correta.
O documento discute a evolução de frameworks Java como Struts para CDI e VRaptor, e como implementar injeção de dependência e escopo de requisição com CDI. Também apresenta uma abordagem para integrar VRaptor e Struts em uma mesma aplicação.
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
O documento descreve como utilizar CDI (Contexts and Dependency Injection) em projetos Java para injeção de dependências, gerenciamento do ciclo de vida de objetos e desacoplamento de classes. CDI permite especificar dependências usando anotações como @Inject e @Produces e controla a criação e injeção desses objetos.
Palestra TDC SP 2018 / atualização InovaBRA: Nesta palestra, vamos apresentar o Flutter, o SDK de desenvolvimento multiplataforma do Google para criação de apps com performance de app nativo e visual atrativo, além de mostrar, na prática, os aplicativos gerados para as duas plataformas a partir de um único código fonte. Falaremos ainda da experiência de um trabalho conjunto de desenvolvedores Android e iOS na criação de um app que foi destaque no Google I/O.
O documento apresenta Flutter, um framework multiplataforma do Google para desenvolvimento de aplicativos. Ele resume os principais pontos sobre a arquitetura, widgets, integração com código nativo, geração de versões e um caso de uso com o aplicativo VivaBem do UOL.
O documento discute o uso do CDI (Contexts and Dependency Injection) em projetos Java, apresentando seus principais benefícios como injeção de dependências, separação de responsabilidades e inversão de controle. O CDI permite definir dependências entre classes de forma declarativa usando anotações como @Inject.
O documento apresenta Flutter, um framework multiplataforma do Google para desenvolvimento de aplicativos. Ele discute a arquitetura, widgets, internacionalização e integração com código nativo em Flutter, além de mostrar um caso de uso para o desenvolvimento de um aplicativo para o UOL VivaBem.
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaotdc-globalcode
O documento apresenta Flutter, um framework multiplataforma do Google para desenvolvimento de aplicativos. Ele discute como Flutter funciona, demonstra a construção de uma interface com widgets, explica a integração com código nativo e geração de versões, e apresenta um caso de uso com o aplicativo VivaBem do UOL.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
O documento apresenta um resumo sobre padrões de projeto. Discute classificação de padrões, exemplos de Factory Method, Decorator, Observer e Strategy. Também aborda princípios SOLID e anti-padrões.
Talk que aborda alguns pontos da programação como SOLID, STUPID, clean code, object calisthenics, composer e algumas dicas pessoais.
Feita para o flisol 2017.
Twig é uma linguagem de template para PHP que permite separar a lógica da apresentação. Ela oferece recursos como loops, condicionais, herança de templates, macros e filtros para formatação de dados. Sua sintaxe limpa e expressiva facilita a manutenção e legibilidade do código da view.
O documento descreve como desenvolver aplicativos para Android, incluindo como instalar as ferramentas necessárias como Java, Eclipse, SDK do Android e como criar um projeto simples de pesquisa chamado "Gugol" com uma interface gráfica e funcionalidade de pesquisa.
Aqui são apresentados as técnicas de Desenvolvimento Ágil: eXtreme Programming. Simples e prático.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute técnicas e boas práticas para lidar com código legado, como versionamento, testes, organização do código e programação orientada a objetos. Algumas das técnicas discutidas incluem utilizar ferramentas como Git para versionamento, Composer para gerenciamento de pacotes, PHPUnit e SimpleTest para testes, EditorConfig para padronização de estilos e CodeSniffer para análises estáticas. O documento também apresenta a técnica de "Programação Calistênica" para melhorar o design do código.
Spring Web MVC é um framework flexível e sofisticado para desenvolvimento de aplicações web em Java seguindo o padrão MVC. Ele oferece recursos como mapeamento de requisições, injeção de dependência, validação, tratamento de exceções e suporte a REST entre outros.
Fazendo Injeção de dependência com Unity 1.2Giovanni Bassi
O documento discute injeção de dependência com o framework Unity. Ele explica os princípios da inversão de dependência e como Unity permite diferentes tipos de injeção como constructor, property e method call injection. Também mostra como configurar dependências no Unity e realizar testes utilizando mocks.
Este documento fornece instruções passo-a-passo para criar um aplicativo móvel simples em Android usando Java. Ele explica como criar a interface do usuário, recuperar dados e adicionar funcionalidade de clique em itens de lista.
Semelhante a Android DevConference - SOLID no Android (20)
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
1. O documento apresenta os principais modelos de bancos de dados NoSQL: chave-valor (Redis), orientado a documentos (MongoDB), orientado a colunas (Cassandra) e orientado a grafos (Neo4j).
2. Nos modelos orientados a documentos e colunas, o documento discute quando usar dados embutidos versus referenciados, enquanto no modelo de grafos destaca a importância dos nós e relacionamentos.
3. O documento fornece dicas sobre modelagem de dados em cada modelo, incluindo tipos de dados, índices
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
O PostgreSQL começou a ser desenvolvido em 1986 e tem ganhado bastante destaque nos últimos anos, como o banco de dados que mais cresce no mercado. Conheça as vantagens e desvantagens em se utilizar o banco de dados Open Source mais avançado do mundo.
Por que minha query esta lenta? - Suellen MoraesiMasters
Durante os anos de experiencia percebi que grande parte dos desenvolvedores possuem dificuldade em iniciar o troubleshooting de suas queries, muitas vezes sobrecarregando o DBA em muitos dos casos com queries simples. O intuito desta palestrar é mostrar o "caminho das pedras" para despertar nos desenvolvedores a necessidade de se conhecer o funcionamento da ferramenta utilizada e visando os desenvolvimentos futuros tendo como foco o pensamento em performance do código escrito e dicas de melhores códigos.
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
O documento discute os problemas recorrentes encontrados em bancos de dados, como versões de patch desatualizadas, falta de testes de disponibilidade e índices, e enfatiza a importância da preparação para imprevistos e da alta disponibilidade. O autor é um especialista em banco de dados com 11 anos de experiência que oferece consultoria para identificar e resolver esses problemas.
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
Com a evolução dos aplicativos nascem novas técnicas, frameworks, linguagens de programação, porém, existe um fato consolidado dentro da arquitetura de software corporativo que é a integração com alguma tecnologia necessária para armazenar as informações inerentes ao sistema. Seja SQL ou NoSQL um ponto importante é que o paradigma das linguagens difere da tecnologia do banco de dados. Com o intuito de facilitar o desenvolvimento surgem as ferramentas que realizam a interpretação entre a camada da aplicação e os bancos. Assim, aparecem grandes desafios: como lidar com essa lacuna multiparadigma? Como favorecer o desenvolvimento sem impactar a performance e a modelagem no banco de dados? O objetivo dessa palestra é falar um pouco desses pontos para que, finalmente, os programadores e os DBAs conseguam viver em paz e harmonia.
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
Neste bate papo vamos discutir quais as vantagens de cada banco de dados no mundo real. Quando devemos utilizar o NoSQL ao invés do SQL ou vice-versa comparando os principais bancos de dados open source de cada segmento, o MongoDB e o MySQL
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
Diante das novas regulamentações externas (GDPR), e a nova legislação Brasileira sobre Proteção de Dados Pessoais (LGPD), o que fazer para se adequar? Por Onde começar? O que Fazer? E o que não fazer? Para que serve a Governança de Dados e como ela pode ajudar sua empresa no processo de adequação/conformidade a padrões internacionais de Privacidade e Segurança da Informação? Diante de tantos caminhos e desafios, um overview do que se trata, por onde começar o caminho, algumas armadilhas a evitar, e algumas boas práticas para não apenas se proteger, mas evitar futuros problemas.
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
O documento discute o papel do DBA no mundo da ciência de dados e machine learning. Ele descreve como os DBAs precisam se adaptar às novas tecnologias e aprender habilidades como análise e modelagem de dados para acompanhar a evolução da área. Recomenda que os DBAs demonstrem interesse em entender os processos dos cientistas de dados e colaborem sem barreiras entre as equipes.
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
Juliana Chahoud - Consultora, ThoughtWorks
Com tantas empresas adotando a estratégia "Mobile-First" (dispositivos móveis em primeiro), uma das grandes decisões que um time de desenvolvimento precisa tomar é: qual tech stack usar para mobile?
Diversas tecnologias e linguagens podem ser adotadas, como Swift, Java, Kotlin, React Native, Flutter, Progressive Web App, criação de sites responsivos, etc...
No entanto, com tantas variáveis a serem consideradas, essa decisão passou a ser não trivial e que pode trazer grandes consequências a longo prazo e até mesmo inviabilizar um projeto.
Nessa palestra serão discutidos os prós e contras de diversas abordagens, para que você possa ter um guia para tomar decisões mais corretas no uso dessas tecnologias
Palestra apresentada no InterCon 2018 - https://eventos.imasters.com.br/intercon
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
Este documento discute o desenvolvimento orientado a modelos (MDD) e suas vantagens, como maior produtividade, qualidade e facilidade de manutenção através do uso de modelos e geração de código. Apresenta também algumas ferramentas e linguagens de MDD, e alerta para possíveis problemas como rigidez de soluções e dependência de ferramentas limitadas.
Entendendo os porquês do seu servidor - Talita BernardesiMasters
O documento discute a importância da performance para servidores. Ele explica que lentidão não é mais aceitável e clientes infelizes significam produtos ruins. Também recomenda monitorar recursos de servidores, otimizar serviços e aplicações, escolher máquinas apropriadas e atualizar configurações, já que máquinas não duram para sempre.
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
Trabalhar a performance no backend vai muito além de simplesmente ""colocar mais máquinas atrás do loadbalancer""
. Vamos apontar alguns gargalos comuns que podem ser tratados ou evitados desde o começo do desenvolvimento, já que não dependem da tecnologia utilizada.
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
Renato Groffe - Engenheiro de Software, Canal .NET
O que posso fazer em termos de bancos de dados para obter APIs que executem seu trabalho de forma otimizada e com maior velocidade?
Que soluções para cache podem ser empregadas? E que tal tratar os retornos destas APIs, reduzindo o volume dos dados trafegados?
E quanto a problemas de performance, o que utilizar para facilitar a detecção destes tipos de ocorrências? Acompanhe esta apresentação para obter respostas a estas questões durante o desenvolvimento de APIs REST.
Palestra realizada no InterCon 2018 - https://eventos.imasters.com.br/intercon
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
Este documento fornece 21 dicas para melhorar o desempenho de bancos de dados, incluindo modelar corretamente os dados, entender o modelo de dados, verificar as operações e queries mais importantes, realizar manutenção de índices, e selecionar apenas os atributos necessários nas queries.
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
O documento discute a importância da acessibilidade na web e como projetar sites e aplicativos web de forma acessível. Ele enfatiza que a acessibilidade é essencial para desenvolvedores e organizações que desejam criar produtos e serviços inclusivos. O documento também discute como começar a projetar sites acessíveis usando HTML5 semântico e focando na usabilidade, além de recomendar os padrões WCAG para acessibilidade.
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
O documento apresenta uma discussão sobre a arquitetura monolítica versus microserviços e como o Service Mesh com Istio e Kubernetes pode resolver problemas de comunicação entre serviços distribuídos. O palestrante discute as vantagens e desvantagens de ambas as arquiteturas e como ferramentas como Docker, Kubernetes e Istio podem ser usadas para orquestrar contêineres e fornecer funcionalidades como balanceamento de carga, segurança e monitoramento para aplicações de microserviços.
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
Augusto Pascutti - Developer, Creditas
Para o quê eles servem e como usá-los de forma mais eficiente, seja através de integrações com outras ferramentas ou só seguindo receitas de como as mensagens de erro devem ser geradas e compostas.
Apresentado no InterCon 2018: https://eventos.imasters.com.br/intercon
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
Rubens Guimarães - CEO, e-Seth
Como projetar e colocar em prática bancos de dados inteligentes SQL e NoSQL em ambientes de alto consumo de dados.
Técnicas de sharding, tunning, elasticidade automatizada em ambientes cloud e outros recursos.
Apresentado no InterCon 2018 - https://eventos.imasters.com.br/intercon
Construindo aplicações mais confiantes - Carolina KarklisiMasters
Carolina Karklis - Software developer, Magnetis
O hype da orientação a objetos passou e com ele precisamos rever algumas práticas.
Até mesmo o codebase mais limpo pode ter mensagens de erro precárias, checagens de tipo de dado em excesso, e uso dispensável de variáveis nulas.
Nessa talk vou refatorar um sistema frágil e mostrar estratégias dentro do paradigma de orientação a objetos para escrever código de forma mais simples e confiante.
No processo, vamos ver padrões de arquitetura de software que podemos usar, como melhorar mensagens para cenários de input inesperado e remover todas as variáveis nulas possíveis do nosso código.
Monitoramento de Aplicações - Felipe RegalgoiMasters
Felipe Regalgo apresenta diversas ferramentas de monitoramento e análise de aplicações e serviços, incluindo New Relic para monitoramento de desempenho, Datadog para métricas customizadas, Hotjar para análise de comportamento de usuários, Google Analytics e Melidata para métricas de negócio e Tableau para visualização de dados. O documento também descreve o gerenciador de alertas OpsGenie e a plataforma interna Fury para configuração e gerenciamento de aplicações.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
2. Esses são os slides que apresentei no
Android Dev Conference 2016.
Acreditei que por não conter nenhum
“voice over” seria justo fazer pequenas
adaptações para melhor entendimento,
espero que seja útil para você!
14. public class Produto {
private String descricao;
private int quantidade;
private long preco;
// ... getters/setters
}
public class Pedido {
private int numeroDoPedido;
private List<Produto> produtos = new ArrayList<>();
// ... getters/setters
}
15. public class PedidoRecyclerAdapter
extends RecyclerView.Adapter<PedidoRecyclerAdapter.ViewHolder> {
private List<Pedido> pedidos;
public OrderRecyclerAdapter(List<Pedido> pedidos) {
this.pedidos = pedidos;
}
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.item_pedidos, parent, false);
return new ViewHolder(v);
}
@Override public void onBindViewHolder(ViewHolder holder, int position) {
// TODO: Faz o vínculo entre o modelo e a view
}
@Override public int getItemCount() {
return pedidos.size();
}
// ... ViewHolder e métodos
}
16. @Override public void onBindViewHolder(ViewHolder holder, int position) {
Pedido pedido = items.get(position);
holder.numeroDoPedido.setText(pedido.getNumeroDoPedido().toString());
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String valorTotal = formatter.format(total);
holder.valorTotalDoPedido.setText(valorTotal);
holder.itemView.setTag(pedido);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView numeroDoPedido;
public TextView valorTotalDoPedido;
// FindViews.
}
17. long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String valorTotal = formatter.format(total);
holder.valorTotalDoPedido.setText(valorTotal);
19. public class Pedido {
private int numeroDoPedido;
private List<Produto> produtos = new ArrayList<>();
// ... getters/setters
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
return total;
}
public String getValorTotalDoPedidoFormatado() {
long total = getValorTotalDoPedido();
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String valorTotal = formatter.format(total);
return valorTotal;
}
}
20. @Override
public void onBindViewHolder(ViewHolder holder, int position) {
Pedido pedido = items.get(position);
holder.numeroDoPedido.setText(pedido.getNumeroDoPedidoFormatado());
holder.valorTotalDoPedido.setText(pedido.getValorTotalDoPedidoFormato());
holder.itemView.setTag(pedido);
}
25. public class Pedido {
private int numeroDoPedido;
private List<Produto> produtos = new ArrayList<>();
// ... getters/setters
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
return total;
}
public String getValorTotalDoPedidoFormatado() {
long total = getValorTotalDoPedido();
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String valorTotal = formatter.format(total);
return valorTotal;
}
}
26. private static final int SEM_DESCONTO = 0;
private static final int DESCONTO_10_POR_CENTO = 1;
private static final int DESCONTO_15_POR_CENTO = 2;
private int tipoDeDesconto;
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
if (tipoDeDesconto == DESCONTO_10_POR_CENTO) {
long descontoDe10PorCento = total * 0.1;
total += descontoDe10PorCento;
} else if (tipoDeDesconto == DESCONTO_15_POR_CENTO ) {
long descontoDe15PorCento = total * 0.15;
total += descontoDe15PorCento;
}
return total;
}
27. public class Pedido {
private static final int SEM_DESCONTO = 0;
private static final int DESCONTO_10_POR_CENTO = 1;
private static final int DESCONTO_15_POR_CENTO = 2;
private int numeroDoPedido;
private List<Produto> produtos = new ArrayList<>();
private int tipoDeDesconto;
// ... getters/setters
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
if (tipoDeDesconto == DESCONTO_10_POR_CENTO) {
long descontoDe10PorCento = total * 0.1;
total += descontoDe10PorCento;
} else if (tipoDeDesconto == DESCONTO_15_POR_CENTO ) {
long descontoDe15PorCento = total * 0.15;
total += descontoDe15PorCento;
}
return total;
}
public String getValorTotalDoPedidoFormatado() {
long total = getValorTotalDoPedido();
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String valorTotal = formatter.format(total);
return valorTotal;
}
}
28. private static final int SEM_DESCONTO = 0;
private static final int DESCONTO_10_POR_CENTO = 1;
private static final int DESCONTO_15_POR_CENTO = 2;
private static final int DESCONTO_20_POR_CENTO = 3;
private static final int DESCONTO_25_POR_CENTO = 4;
private int tipoDeDesconto;
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
if (tipoDeDesconto == DESCONTO_10_POR_CENTO) {
long descontoDe10PorCento = total * 0.1;
total += descontoDe10PorCento;
} else if (tipoDeDesconto == DESCONTO_15_POR_CENTO) {
long descontoDe15PorCento = total * 0.15;
total += descontoDe15PorCento;
} else if (tipoDeDesconto == DESCONTO_20_POR_CENTO) {
long descontoDe20PorCento = total * 0.20;
total += descontoDe20PorCento;
} else if (tipoDeDesconto == DESCONTO_25_POR_CENTO) {
long descontoDe25PorCento = total * 0.25;
total += descontoDe25PorCento;
}
return total;
}
31. public interface Desconto {
long calculaDesconto(long valor);
}
// Padrão de Projeto: Objeto Nulo.
public class SemDesconto implements Desconto {
public long calculaDesconto(long valor) {
return 0;
}
}
public class DescontoDe10PorCento implements Desconto {
public long calculaDesconto(long valor) {
return valor * 0.1;
}
}
public class DescontoDe15PorCento implements Desconto {
public long calculaDesconto(long valor) {
return valor * 0.15;
}
}
// Outros descontos.
33. private Desconto desconto = new SemDesconto();
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
// Não é necessário verificar se o desconto é null, pois
// sempre existirá um desconto vazio: SemDesconto.
desconto = desconto.calculaDesconto(total);
return total + desconto;
}
34. public class Pedido {
private int numeroDoPedido;
private List<Produto> produtos = new ArrayList<>();
private Desconto desconto = new SemDesconto();
// ... getters/setters
public long getValorTotalDoPedido() {
long total = 0;
for (Produto produto : pedido.getProdutos()) {
total += produto.getPreco();
}
desconto = desconto.calculaDesconto(total);
return total + desconto;
}
public String getValorTotalDoPedidoFormatado() {
long total = getValorTotalDoPedido();
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
String valorTotal = formatter.format(total);
return valorTotal;
}
}
38. // Violação do Princípio de Liskov.
public interface Carro {
public void partidaNoMotor();
}
public class Ferrari implements Carro {
@Override public double partidaNoMotor() {
// TODO: Lógica.
}
}
public class Tesla implements Carro {
@Override public void ligaCarro() {
// TODO: Lógica.
}
@Override public double partidaNoMotor() {
// TODO: Lógica.
}
}
// Iniciar Carro.
public void iniciarPartidaDeCarro(Carro carro) {
carro.partidaNoMotor();
}
39. // "Tentativa de correção" do princípio de Liskov.
public void iniciarPartidaDeCarro(Carro carro) {
if (carro instanceof Tesla) {
Tesla tesla = (Tesla) carro;
tesla.ligaCarro();
}
carro.partidaNoMotor();
}
41. // Correção do Princípio de Liskov
public interface Carro {
public void partidaNoMotor();
}
public class Ferrari implements Carro {
@Override public double partidaNoMotor() {
// TODO: Implementação.
}
}
public class Tesla implements Carro {
// Implementação do ligaCarro();
@Override public double partidaNoMotor() {
if (!estaDescarregado) {
ligaCarro();
}
// TODO: Implementação.
}
}
// Iniciar Carro.
public void iniciarPartidaDeCarro(Carro carro) {
carro.partidaNoMotor();
}
52. // Violação do Princípio da Inversão de Dependência.
class Presenter {
private final UsuarioRepositorio usuarioRepositorio
= new UsuarioRepositorio();
// TODO: Implementação diversas.
}
class UsuarioRepositorio {
public getUsuario() {
// TODO: Recupera o usuário conectado.
}
}