• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Arquitetura mix thiagoboufleuhr
 

Arquitetura mix thiagoboufleuhr

on

  • 238 views

 

Statistics

Views

Total Views
238
Views on SlideShare
238
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Arquitetura mix thiagoboufleuhr Arquitetura mix thiagoboufleuhr Presentation Transcript

    • Thiago Boufleuhr Arquiteto de SoluçõesBem vindo!segunda-feira, 10 de dezembro 2012
    • agenda f(x)
    • agenda@ ?
    • s.o.l.i.d.Alguns tópicos podem ferir seus sentimentos.
    • s.o.l.i.d. “...5 princípios básicos de programação orientada à objetos, quando aplicados de forma conjunta visam garantir a facilidadede manutenção e evolução ao longo do tempo de vida de um software...” Uncle Bob
    • s.o.l.i.d. Single ResponsibilityDependency Open Inversion Closed SOLID Interface Liskov Segregation Substitution
    • s.o.l.i.d.fato! “...você não programa orientado a objetos...”
    • s.o.l.i.d.single responsibility principle...um objeto deve possuir apenas uma única responsabilidade e apenas um motivo para mudar...
    • s.o.l.i.d.
    • s.o.l.i.d.open/closed principle...uma classe deve ser aberta para extensão e fechada para modificação...
    • s.o.l.i.d.
    • s.o.l.i.d.liskov substitution principle...objetos devem ser substituíveis pelo seu super tipo sem afetar o correto comportamento do sistema...
    • s.o.l.i.d.
    • s.o.l.i.d.
    • s.o.l.i.d.interface segregation principle...interfaces de granularidade alta para necessidades específicas do cliente...
    • s.o.l.i.d.
    • s.o.l.i.d.dependency inversion principle ...desenvolva para abstrações, não para classes concretas...
    • s.o.l.i.d.
    • s.o.l.i.d.
    • design patterns...soluções reutilizáveis para problemas recorrentes no desenvolvimento de software...
    • design patterns
    • design patterns
    • design patterns
    • design patterns
    • design patterns
    • design patterns
    • design patterns abstract factory builder prototype singleton
    • design patternsabstract factory fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas
    • design patternsabstract factory
    • design patternsbuildersepara a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção possa criar diferentes representações
    • design patternsbuilder
    • design patternsprototype especifica um tipo de objeto a ser criado usando uma instância como protótipo para criar novos objetos
    • design patternsprototype
    • design patternssingleton garante que um objeto terá apenas uma instância e define um ponto único de acesso a essa instância
    • design patternssingleton
    • design patterns adapter bridge composite decorator facade proxy
    • design patternsadapterconverte a interface de uma classe em outra interface esperada pelos clientes,permite que classes trabalhem juntas mesmo com interfaces incompatíveis
    • design patternsadapter
    • design patternsbridge desacopla uma abstração da sua implementação para que ambas possam variar de forma independente
    • design patternsbridge
    • design patternscompositecompõe objetos em estruturas de árvore para representar hierarquias parte-todo, permite que clientes tratemobjetos individuais e composições de objetos de maneira uniforme
    • design patternscomposite
    • design patternsdecorator anexa responsabilidades adicionais a um objeto de forma dinâmica, fornecendo uma alternativa flexível para extensão de comportamento
    • design patternsdecorator
    • design patternsfacade fornece uma interface unificada para um conjunto de interfaces em um subsistema,define uma interface de nível mais elevado para abstrair a lógica de subsistemas complexos
    • design patternsfacade
    • design patternsproxypermite abstrair o objeto em uso através de uma interface comum, delegando a execução do comportamento ao mesmo
    • design patternsproxy
    • design patterns command  template method state  visitor strategy  observer
    • design patternscommandencapsula uma solicitação em forma de objeto, permite parametrizar as requisições ao longo das chamadas a esse objeto
    • design patternscommand
    • design patternsstate permite que um objeto altere seu comportamento quando seu estado interno muda, o objeto irá alterar seu tipo
    • design patternsstate
    • design patternsstrategy define uma família de algoritmos,encapsula cada um, e torna-os intercambiáveis, permite que o algoritmo varieindependentemente dos clientes que o utilizam
    • design patternsstrategy
    • design patternstemplate method define o esqueleto de um algoritmo deixando alguns passos para as subclasses redefinirem algumas etapas sem alterar a estrutura do algoritmo
    • design patternstemplate method
    • design patternsvisitorrepresenta uma operação a ser realizada sobre elementos de uma estrutura de objeto, permite que você defina uma nova operação sem alterar as classes dos elementos sobre os quais atua
    • design patternsvisitor
    • design patternsobserver define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente
    • design patternsobserver
    • design patterns
    • design patterns
    • ioc – di
    • ioc – diinversion of control
    • ioc – diinversion of control uma classe não deve conhecer como suas dependências são criadas, somente a interface pública de acesso as mesmas
    • ioc – diinversion of control• desacopla componentes e camadas em um sistema• remove a responsabilidade de um componente resolver suas dependências• permite a troca da implementação em diferentes ambientes• permite que o componente seja testável (mock, unit test)• fornece um mecanismo para troca de recursos em uma aplicação
    • ioc – diinversion of control
    • ioc – diinversion of control
    • ioc – didependency injection
    • ioc – didependency injection uma forma prática de aplicar o conceito de IoC, diminuindo o acoplamento entre uma classe e suas dependências
    • ioc – didependency injection• permite que o componente seja testável (mock, unit test)• promove baixo acoplamento entre classes e subsistemas• adiciona flexibilidade potencial para futuras mudanças• habilita uma forma de reusar componentes para fins semelhantes• A implementação é simples e não precisa de um container de DI
    • ioc – didependency injection
    • ioc – didependency injection• Ninject - http://www.ninject.org/• Simple Injector - http://simpleinjector.codeplex.com/• Unity 2.1 - http://msdn.microsoft.com/en-us/library/dd203101.aspx• Structure Map - http://docs.structuremap.net/• Windsor - http://docs.castleproject.org/Active%20Record.MainPage.ashx• AutoFac - http://code.google.com/p/autofac/
    • ioc – didependency injection
    • ioc – didependency injection singleton
    • ioc – didependency injection transient
    • ioc – didependency injection combined
    • functionsanonymous
    • functions
    • functionsanonymousa partir do C# 2.0 foi introduzido o conceito de métodos anônimos (sem um nome)
    • functionsanonymouspermite declarar de forma in line um método sem a necessidade da lista de parâmetros
    • functionsanonymous todo método anônimo é um delegate
    • functionsanonymous
    • functionslambda
    • functionslambda uma expressão lambda é uma função anônima utilizada para criar delegates ou expression trees
    • functionslambdautilizada para criar funções anônimas locais, que podem ser passadas como parâmetros ou retornadas de outros métodos
    • functionslambdasubstitui a utilização de anonymous methods adicionando mais funcionalidades em sua execução
    • functionslambda (input parameters) => { statement; } (x, y) => x == y (int x, string s) => s.Length > x ( ) => MeuMetodo()
    • functionslambda
    • functionslambda
    • functionsextensions
    • functionsextensions permite adicionar novos comportamentos em objetos, sem a necessidade de derivarde um tipo base, implementar uma interface ou até mesmo recompilar o código
    • functionsextensions
    • tpl – async/await
    • tpl – async/awaitconceitos síncrono: thread é bloqueada até que o processamento seja finalizado assíncrono: thread não é bloqueado até que o processamento seja finalizado
    • tpl – async/awaitconceitos
    • tpl – async/awaitconceitos
    • tpl – async/await
    • tpl – async/awaittask parallel library define um conjunto de API’s públicas no namespace System.Threading responsável por abstrair a complexidade de trabalhar em ambientes multithreaded e de forma paralela
    • tpl – async/awaittask parallel library• trabalha com todos os processadores disponíveis• simplifica a aplicação do conceito• suporta cancelamento de execução (token)• gerenciamento de estado• melhora a performance do código particionando a execução lógica
    • tpl – async/awaittask parallel library
    • tpl – async/awaittask parallel library• nem todo código é desenhado para ser executado de forma paralela• pode criar um overhead quando utilizado de forma incorreta• necessário conhecer conceitos de: • locks • deadlocks • race conditions• não considere como sendo a forma mais rápida de execução• evite escrever em espaços compartilhados de memória (static)• evite chamar métodos que não são thread safe
    • tpl – async/awaittask parallel library
    • tpl – async/awaittask parallel library demo
    • tpl – async/awaitasync/await
    • tpl – async/awaitasync/await
    • tpl – async/awaitasync/await demo
    • tddtest-driven development
    • tddproblemática bom barato rápido
    • tddproblemática mais erros menos testes menos tempo
    • tddproblemática
    • tddproblemática
    • tddproblemática
    • tddproblemática
    • tddproblemática
    • tddproblemática
    • tddproblemática
    • tddproblemática
    • tddsolução: test-driven development “...remove o medo no desenvolvimento de software...” sinpo és dédi
    • tddtest-driven development
    • tdd test-driven development3 – elimine a 1 – escreva um redundância teste que falhe vermelho refactoring verde 2 – escreva um código para passar no teste
    • tddtest-driven development
    • tddtest-driven development
    • tddtest-driven development• assegura a qualidade do código• garante a existência de testes unitários• reduz a possiblidade de erros no código• simplifica o código, uma vez que somente o necessário é programado• define as interfaces entre os objetos (consumidor)• permite definir os componentes de forma desacoplada, flexível e extensível• documentação viva (runtime documentation)• garante seu emprego!
    • tddtest-driven development
    • tddtest-driven development
    • tddtest-driven development
    • tddtest-driven development
    • tddtest-driven development
    • tddtest-driven development
    • dúvidas
    • obrigado