SlideShare uma empresa Scribd logo
1 de 50
Arquitetura de
     Software
Performance, Layers e Domain Layer



André Faria Gomes
@andrefaria
Conceitos de
Performance
Tempo de Resposta
         Tempo de
      processamento de
       uma requisição
           externa
      2 segundos
Responsividade
   Tempo de reação a
    uma requisição




            100 Ms
Latência
   Tempo mínimo para
   qualquer requisição,
      mesmo nula


500 Ms
Throughput
Quanto pode ser feito
em um dado intervalo
     de tempo
1588 bytes/segundo
900 transações/minuto
Carga
 Stress suportado
 por um sistema,
geralmente medido
  em número de
     usuários.

5000 usuários
Sensibilidade a
   Carga
      Variação do
        tempo de
      resposta em
    relação a carga
Performance
                         Eficiência
  dividida pelos
     recursos

Um sistema que realiza
 50 transações em 1
CPU é melhor do que
 que faz 80 com 2.
Escalabilidade
  O quanto adicionar recursos
(hardware) afeta a performance?
Horizontal
  Melhorar recursos da máquina

Vertical
  Aumentar o número de servidores
Padrões
São propostas de
soluções para um
  problemas que
     comuns.
Layers
Divisão Conceitual
 Você pode criar um
  serviço Ftp sem
  compreender Tcp
Isolamento
 Você pode alterar um
camada sem afetar as
        outras
Substituição
Substituir 1 camada sem modificar outras
Layer != Tier
      Tier
 Divisão Física
       (Client/Server)


     Layer
 Divisão Lógica
(que também poderia ser física)
Camadas
Apresentação Domínio         Database
   Interação    Regras de    Comunicação
  do Software   Negócio,      com outros
com o Usuário   Cálculos e    sistemas e
   ou Serviço   Validações   Persistência
    Cliente
As camadas de domínio
 e dados não devem ser
     dependentes da
     apresentação.
                    Fowler
O que aconteceria se você
tivesse que substituir seu
 banco de dados por um
    arquivo XML?
E se tivesse que criar
  um cliente para
 iPhone ao invés de
     HTML?
Regras de Negócio
3 Abordagens
    Transaction Scripts
     Domain Model
      Table Module
Transaction Script
Um procedimento que recebe
dados da camada de apresentação,
    processa com validações e
 cálculos, armazena no banco de
   dados, e invoca operações de
  outros sistemas, então replica
 mais dados para a apresentação
Um procedimento único
     para cada ação
do Usuário

  Pode ser separado
  em sub-rotinas e
    que podem ser
 compartilhadas por
  diferentes scripts.
Vantagens
FácilA maioria dos
 desenvolvedores entende
Bom com Transações
         Bom para definir limites de
           transações. É fácil usar
           ferramentas para tratar
        transações por trás dos panos.
Funciona bem com uma
camada de dados simples
como Row Gateway ou
 Table Data Gateway
nt ag e ns
Des va
Surgem a medida que
 a complexidade das
  regras de negócio
     aumentam,
    principalmente
duplicidade de código e
 falta de legibilidade
1. class Hotel  
2. {  
3.     public function __construct(Data_Access_Gateway gateway)  
4.     {  
5.         this->_gateway = gateway;  
6.     }    
7.   
8.     public function bookRoom(userId, fromDate, toDate)  
9.     {  
10.         roomId = this->_gateway->_getRoomIdBetweenDates(dateFrom, dateTo);    
11.   
12.         if (!roomId) {  
13.             return false;  
14.         }    
15.   
16.         days = this->_getAmountOfDays(fromDate, toDate);    
17.   
18.         if (days < = 7) {  
19.             price = days * 100;  
20.         } else {  
21.             price = days * 80;  
22.         }  
23.   
24.         data = array(  
25.             'userId' => userId,  
26.             'roomId' => roomId,  
27.             'fromDate' => fromDate,  
28.             'toDate' => toDate,  
29.             'price' => price,  
30.         );    
31.   
32.         bookingId = this->_gateway->insert('bookings', data);    
33.   
34.         return bookingId;  
35.     }  
36. }  
Table Module
  É o meio
termo entre o
   Domain
   Model e
Transaction
   Scripts.
Possui apenas 1 instancia por
 tabela ou view que gerencia
   toda a regra de negócio.
class Hotel  {  

    public Hotel(DataAccessGateway gateway, Booking booking) {  
        this.gateway = gateway
        this. booking = booking
    }    
  
    public def bookRoom(userId, fromDate, toDate) {  
        roomId = booking.getRoomBetweenDates(fromDate, toDate)
  
        if (!roomId) {  
            return false
        }    
  
        days = getAmountOfDays(fromDate, toDate);    
  
        if (days < = 7) {  
            price = days * 100
        } else {  
            price = days * 80  
        }  
  
        bookingId = booking.addBooking(userId, roomId, fromDate, toDate, price)
    }  
}  
class Booking {  

     def gateway

    public Booking(DataAccessGateway gateway) {  
        this.gateway = gateway  
    }  
  
    public def getRoomBetweenDates(dateFrom, dateTo) {  
        return gateway.getRoomBetweenDates(dateFrom, dateTo)
    }  
  
    public def addBooking(userId, roomId, fromDate, toDate, price) {  
        data = [  
            'userId' : userId,  
            'roomId' : roomId,  
            'fromDate': fromDate,  
            'toDate' : toDate,  
            'price'   : price,  
        ]
  
        bookingId = gateway.insert('bookings', data)   
    }  

} 
Domain
 Model
É a essência do paradigma OO. Cada objeto
 contém uma parte da lógica, do comportamento
                 relevante a ele.




Objetos
Estrutura a complexidade de forma organizada
DataMapper
Ligação entre
 os objetos do
 domínio e as
  tabelas do
banco de dados
class Hotel {  

    def hotelId
    def rooms 
  
    public def bookRoom(user, fromDate, toDate)  
    {  
        room = getRoomBetweenDates(fromDate, toDate);  
  
        if (!room) {  
            return false;  
        }    
  
        booking = room.bookRoom(user, fromDate, toDate);  
    }  
}  
class Room {  

    def roomId
    def bookings = []
  
    public def bookRoom(user, fromDate, toDate) {  
        days = getAmountOfDays(fromDate, toDate)
  
        if (days < = 7) {  
            booking = 
new Booking(user, new ShortBookingStrategy(user, days))
        } else {  
            booking = 
new Booking(user, new NormalBookingStrategy(user, days))
        }    
        return booking  
    }  
}  
Service
Layer
Divisão
     Uma abordagem comum que divide a
       camada de domínio em duas.
API
    A camada de
apresentação interage
com o domínio apenas
  através do Service
Layer que atua como
   uma API da
      aplicação
Service
 Excelente para inserir
Segurança e Controle de
     Transações.
  Recomendável que
aja como um Façade
 sem comportamento
       próprio.
Regras de Negócio

Domain Model     Controller-Entity
   Apenas             Style          Transaction
 Segurança e     Comportament           Script
Transações no     o comum em
Service Layer,       objetos,         Anemic
Comportament      específico em       Domain
  o todo no        transaction         Model
Domain Model         scripts.

Domain                                     Service
“Minha preferência é por
ter a Service Layer mais
 magra que for possível”
    Martin Fowler
Referências
  http://
  www.thedeveloperday.com/
  domain-model-logic-patterns/

  http://martinfowler.com/
  eaaCatalog/

Mais conteúdo relacionado

Destaque (7)

La Eneida de tiempos modernos
La Eneida de tiempos modernosLa Eneida de tiempos modernos
La Eneida de tiempos modernos
 
дмитро
дмитродмитро
дмитро
 
Actividad 6 eduardo mata
Actividad 6 eduardo mataActividad 6 eduardo mata
Actividad 6 eduardo mata
 
Nicole Resume
Nicole ResumeNicole Resume
Nicole Resume
 
Music genres
Music genresMusic genres
Music genres
 
Resume_Svetlana Veprinsky_7_2016
Resume_Svetlana Veprinsky_7_2016Resume_Svetlana Veprinsky_7_2016
Resume_Svetlana Veprinsky_7_2016
 
MWSRevisedResume092015
MWSRevisedResume092015MWSRevisedResume092015
MWSRevisedResume092015
 

Semelhante a Arquitetura de Software - Performance, Layers e Domain Layer

Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemastaniamaciel
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Sistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesSistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesAdriano Teixeira de Souza
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal RailsLuiz Costa
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devopsDiego Pacheco
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de SoftwareRalph Rassweiler
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFlávio Lisboa
 
Os 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPOs 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPIssac Nolis Ohasi
 
Configuração de Drivers
Configuração de DriversConfiguração de Drivers
Configuração de DriversAVEVA
 
Amazon Aws - Tecnologias e Beneficios
Amazon Aws - Tecnologias e BeneficiosAmazon Aws - Tecnologias e Beneficios
Amazon Aws - Tecnologias e BeneficiosYros
 
requisitos de software.pptx
requisitos de software.pptxrequisitos de software.pptx
requisitos de software.pptxAlanCunha14
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioRalph Rassweiler
 
Webservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPWebservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPFlávio Lisboa
 
Sistemas operacionais de redes II
Sistemas operacionais de redes IISistemas operacionais de redes II
Sistemas operacionais de redes IIDaniel Brandão
 

Semelhante a Arquitetura de Software - Performance, Layers e Domain Layer (20)

XML-RPC.pdf
XML-RPC.pdfXML-RPC.pdf
XML-RPC.pdf
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Sistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web ServicesSistemas Distribuídos - Comunicação Distribuída – Web Services
Sistemas Distribuídos - Comunicação Distribuída – Web Services
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal Rails
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de Software
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHP
 
Os 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPOs 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAP
 
Web service
Web serviceWeb service
Web service
 
Configuração de Drivers
Configuração de DriversConfiguração de Drivers
Configuração de Drivers
 
Amazon Aws - Tecnologias e Beneficios
Amazon Aws - Tecnologias e BeneficiosAmazon Aws - Tecnologias e Beneficios
Amazon Aws - Tecnologias e Beneficios
 
Redes de computador
Redes de computadorRedes de computador
Redes de computador
 
Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
 
requisitos de software.pptx
requisitos de software.pptxrequisitos de software.pptx
requisitos de software.pptx
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Webservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPWebservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHP
 
Apostila oracle
Apostila oracleApostila oracle
Apostila oracle
 
Sistemas operacionais de redes II
Sistemas operacionais de redes IISistemas operacionais de redes II
Sistemas operacionais de redes II
 

Mais de André Faria Gomes

Meetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta PerformanceMeetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta PerformanceAndré Faria Gomes
 
Protagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuroProtagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuroAndré Faria Gomes
 
A Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação DigitalA Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação DigitalAndré Faria Gomes
 
Além da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff WowAlém da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff WowAndré Faria Gomes
 
Modern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, CabifyModern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, CabifyAndré Faria Gomes
 
Principles and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray DalioPrinciples and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray DalioAndré Faria Gomes
 
Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101André Faria Gomes
 
Boas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista WegmansBoas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista WegmansAndré Faria Gomes
 
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...André Faria Gomes
 
Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model André Faria Gomes
 
Palestra na Uninove sobre Agilidade
Palestra na Uninove sobre AgilidadePalestra na Uninove sobre Agilidade
Palestra na Uninove sobre AgilidadeAndré Faria Gomes
 
What happened to Google Reader?
What happened to Google Reader?What happened to Google Reader?
What happened to Google Reader?André Faria Gomes
 
Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0André Faria Gomes
 
Lições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeLições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeAndré Faria Gomes
 
Os 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazesOs 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazesAndré Faria Gomes
 
Objetividade: A Virtude Esquecida
Objetividade: A Virtude EsquecidaObjetividade: A Virtude Esquecida
Objetividade: A Virtude EsquecidaAndré Faria Gomes
 

Mais de André Faria Gomes (20)

Meetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta PerformanceMeetup Escale - Gestão para Equipes de Alta Performance
Meetup Escale - Gestão para Equipes de Alta Performance
 
Protagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuroProtagonistas da inovação - Como criar e gerir os negócios do futuro
Protagonistas da inovação - Como criar e gerir os negócios do futuro
 
A Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação DigitalA Mobilidade como Propulsor da Transformação Digital
A Mobilidade como Propulsor da Transformação Digital
 
Além da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff WowAlém da Agilidade 2019 - KickOff Wow
Além da Agilidade 2019 - KickOff Wow
 
Modern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, CabifyModern systems architectures: Uber, Lyft, Cabify
Modern systems architectures: Uber, Lyft, Cabify
 
Breaking the monolith
Breaking the monolithBreaking the monolith
Breaking the monolith
 
Agilidade - APAS
Agilidade - APASAgilidade - APAS
Agilidade - APAS
 
Principles and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray DalioPrinciples and Radical Transparency - Lessons Learned from Ray Dalio
Principles and Radical Transparency - Lessons Learned from Ray Dalio
 
Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101Bluesoft @ AWS re:Invent 2017 + AWS 101
Bluesoft @ AWS re:Invent 2017 + AWS 101
 
Boas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista WegmansBoas Práticas da Rede Supermercadista Wegmans
Boas Práticas da Rede Supermercadista Wegmans
 
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
Boas Práticas para Supermercadistas inspiradas no Whole Foods, Sprouts Marke...
 
Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model Change management - Kotter’s eight-step model
Change management - Kotter’s eight-step model
 
Palestra na Uninove sobre Agilidade
Palestra na Uninove sobre AgilidadePalestra na Uninove sobre Agilidade
Palestra na Uninove sobre Agilidade
 
Pensando Rápido e Devagar
Pensando Rápido e DevagarPensando Rápido e Devagar
Pensando Rápido e Devagar
 
What happened to Google Reader?
What happened to Google Reader?What happened to Google Reader?
What happened to Google Reader?
 
Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0Gestão Ágil com Management 3.0
Gestão Ágil com Management 3.0
 
Lições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeLições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidade
 
Os 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazesOs 7 hábitos das pessoas altamente eficazes
Os 7 hábitos das pessoas altamente eficazes
 
Objetividade: A Virtude Esquecida
Objetividade: A Virtude EsquecidaObjetividade: A Virtude Esquecida
Objetividade: A Virtude Esquecida
 
Bematech IFRS
Bematech IFRSBematech IFRS
Bematech IFRS
 

Arquitetura de Software - Performance, Layers e Domain Layer