SlideShare a Scribd company logo
1 of 54
Qualidade
Alexandre Brandão Lustosa
SOLID
Domain Driven
Design
A MundiPagg é um gateway de
pagamento único desenvolvido para
transformar a indústria de pagamentos
online brasileira.
Um rápido crescimento
Somos uma companhia jovem, mas com bastante
experiência no mercado.
Em menos de três anos, a MundiPagg já
processava 30 % do varejo online brasileiro.
Ano passado processamos cerca de R$ 6 bilhões e
esperamos mais de R$ 15 bilhões em 2015.
Em 2014, recuperamos cerca de
R$ 87,5 milhõespara nossos clientes
PLATAFORMA ONE
MUNDIPAGG
Nosso ecossistema
A MundiPagg é uma companhia da DLP que objetiva ser um canal para a adquirência.
Ecossistema DLP
ONLINE
FÍSICO
ADQUIRENTE
GATEWAY DE PAGAMENTOS
TEF / GATEWAY OFFLINE
PROCESSADORA
Pagar.me
Nossos clientes
LOJAS DEPARTAMENTO MODA ENTRETENIMENTO ALIMENTOS
Temos mais de 1500 lojas em nosso portfólio, algumas delas são as maiores marcas brasileiras e internacionais.
ÓLEO TV
Faça parte do nosso time!
vagas@mundipagg.com
abrandao@mundipagg.com
"A única maneira de fazer um excelente trabalho é amar o que você faz."
(Steve Jobs)
Faça parte do nosso time!
querotrabalhar@stone.com
abrandao@mundipagg.com
"A única maneira de fazer um excelente trabalho é amar o que você faz."
(Steve Jobs)
Alexandre
Brandão
{ Microsoft C# .Net Solution Developer,
C++ Linux Developer, C/C++ Embedded Programmer }
<contatos>
<twitter>
@abrandaolustosa
</twitter>
<skype>
abrandao@mundipagg.com
</skype>
</contatos>
Analista Desenvolvedor Sênior
Arquiteto de Sistemas
/*
Linkedin: abrandaol
*/
curl -data “experiencia=16_anos&motivacao=inovacao%20e%20pesquisa” https://www.mundipagg.com
{ “Agenda” :
{
“Qualidade” : “Pense, Modele, Teste, Faça”,
“DDD” : “Domine o Domínio”,
“SOLID” : {
“Conceito” : “Motivação”,
“Interface” : “Programe para Interface”
“Aplicação” : “Definição e Uso”
}
}
}
/* “Você pode encarar um erro como uma besteira a ser esquecida, ou
como um resultado que aponta uma nova direção.” */
http://blog.codeeval.com/codeevalblog/2015#.VWW9dbznreQ=
[ DART ]
{ Qualidade de Software }
[ Satisfação do Cliente ]
Tempo / Entregas
Custo Qualidade
Requisitos
Desenvolvimento
Implantação
*Ciclo e Processo Desenvolvimento;
*Ciclo e Processo Desenvolvimento;
Requisitos
Desenvolvimento
Implantação
• Rollback de publicação;
• Indisponibilidade;
• Insatisfação do cliente;
• Riscos no negócio;
• Prejuízo financeiro;
( Modelo V )
Requisitos
Recursos
Arquitetura
Regras de
Negócio
Desenvolvimento
Aceite do Cliente
Teste de Sistema
Teste de
Integração
Teste Unitário
Plano
Plano
Plano
Plano
Validação
Validação
<risco>
Foco na primeira entrega?
</risco>
if(
redução_de_risco ==
foco_na_primeira_entrega){
throw new
Exception(“FALHA”);
}else{
return “SUCESSO!!! :)”;
}
{
“Produtividade”:
“Seu time é ágil?”,
}
- Preciso ser ágil!
• Requisitos
• Planejamento
• BluePrint
• Documentação
• RoadMap
• Deploy
• Monitoramento
• Controlde de
Incidentes
{ Modelo V / Desenvolvimento Ágil}
T=> Time + Cultura + Pessoas + Comunicação + Compromisso
T=> Tecnologia + Documentação + Investimento + Foco no Cliente
{ Domain Driven Design }
Projeto Orientado a Domínio
“Atacando as complexidades no coração do software”
(Eric Evans)
[ Objetivos]
• Alinhamento as regras de negócio
• Favorecer reutilização de código
• Mínimo de acoplamento
• Independência de Tecnologia
[ Modelos segundo Eric Evans]
• O modelo e o coração do design dão forma um ao outro
• O modelo é a espinha dorsal de uma linguagem utilizada pelos desenvolvedores
• O modelo é um conhecimento destilado
<Objetivo_do_DDD>
Criar softwares melhores concentrando-se em um modelo
de domínio e não na tecnologia.
</Objetivo_do_DDD>
{ Pilares da Orientação a
Objeto }
• Herança
• Polimorfísmo
• Encapsulamento
• Abstração
{ Padrões de projeto }
Padrões de criação
• Abstract Factory
• Builder
• Factory Method
• Prototype
• Singleton
Padrões estruturais
• Adapter
• Bridge
• Composite
• Decorator
• Façade (ou Facade)
• Flyweight
• Proxy
Padrões comportamentais
• Chain of Responsibility
• Command
• Interpreter
• Iterator
• Mediator
• Memento
• Observer
• State
• Strategy
• Template Method
• Visitor
[ Modelo Conceitual ]
A modularidade se
torna mais crítica a
medida que do
design cresce e se
torna mais complexo.
[Modelo
Conceitual]
[ Isolando o Domínio ]
Cada conceito do modelo de
domínio deve refletir um
elemento da implementação.
{ SOLID }
É um acrônimo para:
- Single responsibility
- Open-closed
- Liskov substitution
- Interface segregation
- Dependency inversion
Criado por Michael Feathers como “Firt Five Principle”, e nomeado como SOLID por Robert C. Martin
{ SOLID }
/*
São cinco princípios básicos da orientação a objeto
*/
{ Single Responsibility }
< Principio da Responsabilidade Única />
Uma classe deve ter um, e somente um, motivo para mudar
{ Single Responsibility }
public class Departamento {
public void calculaNotaFiscal() {
// seu código para calculo da nota fiscal
}
public void calculaPagamentoDeFuncionarios() {
// seu código para cálculo do pagamento
}
public void verificaInadimplenciaDeClientes() {
// seu código para a verificação de inadimplência
}
}
public class NotaFiscal {
public void calculaNotaFiscal() {
// seu código para cálculo da nota fiscal
}
}
public class CalculadoraDePagamento {
public void calculaPagamentoDeFuncionarios() {
// seu código para cálculo do pagamento
}
}
public class VerificadorDeInadimplencia {
public void verificaInadimplenciaDeClientes() {
// seu código para a verificação de inadimplência
}
}
{ Não respeita SOLID }
{ Open-Closed }
< Princípio Aberto-Fechado />
Você deve ser capaz de estender um comportamento de uma classe,
sem modificá-lo.
{ Open-Closed }
public abstract class Shape {
public abstract double Area();
}
public class Rectangle : Shape {
public double Width { get; set; }
public double Height { get; set; }
public override double Area()
{
return Width*Height;
}
}
public class Circle : Shape{
public double Radius { get; set; }
public override double Area()
{
return Radius*Radius*Math.PI;
}
}
public class DrawProcess{
public static double Area(Shape[] shapes){
double area = 0;
foreach (var shape in shapes)
{
area += shape.Area();
}
return area;
}
}
{ Liskov Substitution }
< Princípio da Substituição de Liskov />
As classes derivadas devem ser substituíveis
por suas classes base.
{ Liskov Substitution }
public class BaseClass {
public string ProductName { get; set; }
public virtual void Shipping(){ }
public virtual void Order(){ }
}
public class DerivedClass :BaseClass{
public string CustomerInfo { get; set; }
public void DeliveryAddress(){ }
public override void Shipping(){
base.Shipping();
}
public override void Order(){
base.Order();
}
}
public class Present
{
public static void Main()
{
var baseClass = new DerivedClass();
baseClass.ProductName = “XBox";
baseClass.Shipping();
baseClass.Order();
}
}
{ Interface Segregation }
< Princípio da Segregação da Interface />
Muitas interfaces específicas são melhores
do que uma interface única.
{ Dependency Inversion }
< Princípio da inversão da dependência />
Dependa de uma abstração
e não de uma implementação.
{ Dependency Inversion }
public interface IWorker {
public void work();
}
public class Worker implements IWorker{
public void work() {
// ....working
}
}
public class SuperWorker implements IWorker{
public void work() {
//.... working much more
}
}
public class Manager {
IWorker worker;
public void setWorker(IWorker w) {
worker = w;
}
public void manage() {
worker.work();
}
}
worker = w;
}
public void manage() {
worker.work();
}
}
{ Dependency Inversion }
Containers de injeção de dependência:
Exemplos: Microsoft Unity, Ninject, Spring, Spring.net, etc...
Uso:
1) Registro da interface e tipo
2) Resolve e carrega o tipo registrado para a interface ou identificador
{ Container de DI / IOC – Microsoft Unity }
public void RegisterTypes(){
var container = new UnityContainer();
container.RegisterType<ILivro, Livro>();
}
public void Process(){
var livro = container.Resolve<ILivro>();
//Do something
}
Registro do tipo
Resolve o tipo
{ ! }
{
Seja hoje um pessoa
melhor do que
você foi ontem
}
Pesquise...
Pesquise...
Estude...
Pesquise...
Estude...
Domine...
Pesquise...
Estude...
Influencie...
Domine...
Obrigado :)
Perguntas?
Obrigado :)
E-mail: abrandao@mundipagg.com
Skype: abrandao@mundipagg.com
Twitter: @abrandaolustosa
LinkedIn: abrandaol

More Related Content

Viewers also liked

Chestnut II Stonebridge
Chestnut II StonebridgeChestnut II Stonebridge
Chestnut II Stonebridgelrollins_DRB
 
Pinewood II - Brandywine Reserve
Pinewood II - Brandywine ReservePinewood II - Brandywine Reserve
Pinewood II - Brandywine Reservelrollins_DRB
 
AutoCad warehouse project
AutoCad warehouse projectAutoCad warehouse project
AutoCad warehouse projectSandu Stefan
 
Work portfolio 2016
Work portfolio 2016Work portfolio 2016
Work portfolio 2016Sandu Stefan
 
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQFEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQAlexandre Brandão Lustosa
 
FEUC Tec 2016 - Iot with Slack using Intel Edison
FEUC Tec 2016 - Iot with Slack using Intel EdisonFEUC Tec 2016 - Iot with Slack using Intel Edison
FEUC Tec 2016 - Iot with Slack using Intel EdisonAlexandre Brandão Lustosa
 
IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...
IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...
IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...Alexandre Brandão Lustosa
 
IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...
IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...
IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...Alexandre Brandão Lustosa
 

Viewers also liked (9)

Chestnut II Stonebridge
Chestnut II StonebridgeChestnut II Stonebridge
Chestnut II Stonebridge
 
Pinewood II - Brandywine Reserve
Pinewood II - Brandywine ReservePinewood II - Brandywine Reserve
Pinewood II - Brandywine Reserve
 
AutoCad warehouse project
AutoCad warehouse projectAutoCad warehouse project
AutoCad warehouse project
 
Work portfolio 2016
Work portfolio 2016Work portfolio 2016
Work portfolio 2016
 
Office project
Office projectOffice project
Office project
 
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQFEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
FEUC Tec 2016 - Desacoplando WorkFlows com RabbitMQ
 
FEUC Tec 2016 - Iot with Slack using Intel Edison
FEUC Tec 2016 - Iot with Slack using Intel EdisonFEUC Tec 2016 - Iot with Slack using Intel Edison
FEUC Tec 2016 - Iot with Slack using Intel Edison
 
IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...
IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...
IoT Service Bus - High availability with Internet of Things (IoT)/ API Rest/ ...
 
IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...
IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...
IoT - Internet Of Things/Node.js/API Rest/Service Bus - IMasters Dev Week Por...
 

Similar to IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Pablo Dall'Oglio
 
Project model-canvas-apresentacao
Project model-canvas-apresentacaoProject model-canvas-apresentacao
Project model-canvas-apresentacaoleopaiva217101
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosRafael Chaves
 
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na SagePentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na SageVinicius Elyseu
 
Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Isaac de Souza
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Rodrigo Kono
 
TClientDataSet - Palestra sobre MultiTier
TClientDataSet - Palestra sobre MultiTierTClientDataSet - Palestra sobre MultiTier
TClientDataSet - Palestra sobre MultiTierWecsley Fey
 
Como escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerceComo escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerceRafael Campos
 
Tg460 project modelcanvas
Tg460 project modelcanvasTg460 project modelcanvas
Tg460 project modelcanvasAlexsander Fim
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Como escolher a plataforma ideal para seu e-commerce
Como escolher a plataforma ideal para seu e-commerceComo escolher a plataforma ideal para seu e-commerce
Como escolher a plataforma ideal para seu e-commerceAlexandre Soncini
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvemAdriano Bertucci
 
SAP Fiori Development from Scratch
SAP Fiori Development from ScratchSAP Fiori Development from Scratch
SAP Fiori Development from ScratchJose Nunes
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Marcus Garcia
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosRodney Repullo
 

Similar to IMaster Developer Week RJ - Qualidade de software: SOLID/DDD (20)

Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013
 
Solid
SolidSolid
Solid
 
Project model-canvas-apresentacao
Project model-canvas-apresentacaoProject model-canvas-apresentacao
Project model-canvas-apresentacao
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutos
 
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na SagePentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
Pentaho Day 2015 - Universidade Positivo - Multi Tenancy com Pentaho na Sage
 
Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.Compondo uma plataforma de software com microservices.
Compondo uma plataforma de software com microservices.
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4
 
TClientDataSet - Palestra sobre MultiTier
TClientDataSet - Palestra sobre MultiTierTClientDataSet - Palestra sobre MultiTier
TClientDataSet - Palestra sobre MultiTier
 
Introdução ao Framework CakePHP
Introdução ao Framework CakePHPIntrodução ao Framework CakePHP
Introdução ao Framework CakePHP
 
Como escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerceComo escolher sua plataforma de e commerce
Como escolher sua plataforma de e commerce
 
Tg460 project modelcanvas
Tg460 project modelcanvasTg460 project modelcanvas
Tg460 project modelcanvas
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Oficina Project Model Canvas - Serviço Social
Oficina Project Model Canvas - Serviço SocialOficina Project Model Canvas - Serviço Social
Oficina Project Model Canvas - Serviço Social
 
Como escolher a plataforma ideal para seu e-commerce
Como escolher a plataforma ideal para seu e-commerceComo escolher a plataforma ideal para seu e-commerce
Como escolher a plataforma ideal para seu e-commerce
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvem
 
SAP Fiori Development from Scratch
SAP Fiori Development from ScratchSAP Fiori Development from Scratch
SAP Fiori Development from Scratch
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para Negocios
 

More from Alexandre Brandão Lustosa (14)

Akka.Net - Implementing distributed systems with Akka.net and .Net Core
Akka.Net - Implementing distributed systems with Akka.net and .Net CoreAkka.Net - Implementing distributed systems with Akka.net and .Net Core
Akka.Net - Implementing distributed systems with Akka.net and .Net Core
 
Akka. Net - Desenvolvimento de sistemas distribuídos com Akka.Net
Akka. Net - Desenvolvimento de sistemas distribuídos com Akka.NetAkka. Net - Desenvolvimento de sistemas distribuídos com Akka.Net
Akka. Net - Desenvolvimento de sistemas distribuídos com Akka.Net
 
Akka.Net & .Net Core - .Net Inside 4° MeetUp
Akka.Net & .Net Core - .Net Inside 4° MeetUpAkka.Net & .Net Core - .Net Inside 4° MeetUp
Akka.Net & .Net Core - .Net Inside 4° MeetUp
 
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 FlorianopolisAkka.Net and .Net Core - The Developer Conference 2018 Florianopolis
Akka.Net and .Net Core - The Developer Conference 2018 Florianopolis
 
Azure CosmosDB - TDC2018 Florianopolis
Azure CosmosDB - TDC2018 FlorianopolisAzure CosmosDB - TDC2018 Florianopolis
Azure CosmosDB - TDC2018 Florianopolis
 
Arquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICArquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PIC
 
MS_Learning_Transcript.PDF
MS_Learning_Transcript.PDFMS_Learning_Transcript.PDF
MS_Learning_Transcript.PDF
 
Certificate_7
Certificate_7Certificate_7
Certificate_7
 
Certificate_6
Certificate_6Certificate_6
Certificate_6
 
Certificate_5
Certificate_5Certificate_5
Certificate_5
 
Certificate_4
Certificate_4Certificate_4
Certificate_4
 
Certificate_3
Certificate_3Certificate_3
Certificate_3
 
Certificate_2
Certificate_2Certificate_2
Certificate_2
 
Certificate_1
Certificate_1Certificate_1
Certificate_1
 

IMaster Developer Week RJ - Qualidade de software: SOLID/DDD

  • 2. A MundiPagg é um gateway de pagamento único desenvolvido para transformar a indústria de pagamentos online brasileira.
  • 3. Um rápido crescimento Somos uma companhia jovem, mas com bastante experiência no mercado. Em menos de três anos, a MundiPagg já processava 30 % do varejo online brasileiro. Ano passado processamos cerca de R$ 6 bilhões e esperamos mais de R$ 15 bilhões em 2015.
  • 4. Em 2014, recuperamos cerca de R$ 87,5 milhõespara nossos clientes
  • 6. Nosso ecossistema A MundiPagg é uma companhia da DLP que objetiva ser um canal para a adquirência. Ecossistema DLP ONLINE FÍSICO ADQUIRENTE GATEWAY DE PAGAMENTOS TEF / GATEWAY OFFLINE PROCESSADORA Pagar.me
  • 7. Nossos clientes LOJAS DEPARTAMENTO MODA ENTRETENIMENTO ALIMENTOS Temos mais de 1500 lojas em nosso portfólio, algumas delas são as maiores marcas brasileiras e internacionais. ÓLEO TV
  • 8.
  • 9. Faça parte do nosso time! vagas@mundipagg.com abrandao@mundipagg.com "A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)
  • 10. Faça parte do nosso time! querotrabalhar@stone.com abrandao@mundipagg.com "A única maneira de fazer um excelente trabalho é amar o que você faz." (Steve Jobs)
  • 11. Alexandre Brandão { Microsoft C# .Net Solution Developer, C++ Linux Developer, C/C++ Embedded Programmer } <contatos> <twitter> @abrandaolustosa </twitter> <skype> abrandao@mundipagg.com </skype> </contatos> Analista Desenvolvedor Sênior Arquiteto de Sistemas /* Linkedin: abrandaol */ curl -data “experiencia=16_anos&motivacao=inovacao%20e%20pesquisa” https://www.mundipagg.com
  • 12. { “Agenda” : { “Qualidade” : “Pense, Modele, Teste, Faça”, “DDD” : “Domine o Domínio”, “SOLID” : { “Conceito” : “Motivação”, “Interface” : “Programe para Interface” “Aplicação” : “Definição e Uso” } } } /* “Você pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direção.” */
  • 15. { Qualidade de Software }
  • 16. [ Satisfação do Cliente ] Tempo / Entregas Custo Qualidade
  • 18. *Ciclo e Processo Desenvolvimento; Requisitos Desenvolvimento Implantação • Rollback de publicação; • Indisponibilidade; • Insatisfação do cliente; • Riscos no negócio; • Prejuízo financeiro;
  • 19. ( Modelo V ) Requisitos Recursos Arquitetura Regras de Negócio Desenvolvimento Aceite do Cliente Teste de Sistema Teste de Integração Teste Unitário Plano Plano Plano Plano Validação Validação
  • 20. <risco> Foco na primeira entrega? </risco>
  • 23. - Preciso ser ágil! • Requisitos • Planejamento • BluePrint • Documentação • RoadMap • Deploy • Monitoramento • Controlde de Incidentes
  • 24. { Modelo V / Desenvolvimento Ágil} T=> Time + Cultura + Pessoas + Comunicação + Compromisso T=> Tecnologia + Documentação + Investimento + Foco no Cliente
  • 25. { Domain Driven Design } Projeto Orientado a Domínio “Atacando as complexidades no coração do software” (Eric Evans)
  • 26. [ Objetivos] • Alinhamento as regras de negócio • Favorecer reutilização de código • Mínimo de acoplamento • Independência de Tecnologia
  • 27. [ Modelos segundo Eric Evans] • O modelo e o coração do design dão forma um ao outro • O modelo é a espinha dorsal de uma linguagem utilizada pelos desenvolvedores • O modelo é um conhecimento destilado <Objetivo_do_DDD> Criar softwares melhores concentrando-se em um modelo de domínio e não na tecnologia. </Objetivo_do_DDD>
  • 28. { Pilares da Orientação a Objeto } • Herança • Polimorfísmo • Encapsulamento • Abstração
  • 29. { Padrões de projeto } Padrões de criação • Abstract Factory • Builder • Factory Method • Prototype • Singleton Padrões estruturais • Adapter • Bridge • Composite • Decorator • Façade (ou Facade) • Flyweight • Proxy Padrões comportamentais • Chain of Responsibility • Command • Interpreter • Iterator • Mediator • Memento • Observer • State • Strategy • Template Method • Visitor
  • 30. [ Modelo Conceitual ] A modularidade se torna mais crítica a medida que do design cresce e se torna mais complexo.
  • 32. [ Isolando o Domínio ] Cada conceito do modelo de domínio deve refletir um elemento da implementação.
  • 33. { SOLID } É um acrônimo para: - Single responsibility - Open-closed - Liskov substitution - Interface segregation - Dependency inversion Criado por Michael Feathers como “Firt Five Principle”, e nomeado como SOLID por Robert C. Martin
  • 34. { SOLID } /* São cinco princípios básicos da orientação a objeto */
  • 35. { Single Responsibility } < Principio da Responsabilidade Única /> Uma classe deve ter um, e somente um, motivo para mudar
  • 36. { Single Responsibility } public class Departamento { public void calculaNotaFiscal() { // seu código para calculo da nota fiscal } public void calculaPagamentoDeFuncionarios() { // seu código para cálculo do pagamento } public void verificaInadimplenciaDeClientes() { // seu código para a verificação de inadimplência } } public class NotaFiscal { public void calculaNotaFiscal() { // seu código para cálculo da nota fiscal } } public class CalculadoraDePagamento { public void calculaPagamentoDeFuncionarios() { // seu código para cálculo do pagamento } } public class VerificadorDeInadimplencia { public void verificaInadimplenciaDeClientes() { // seu código para a verificação de inadimplência } } { Não respeita SOLID }
  • 37. { Open-Closed } < Princípio Aberto-Fechado /> Você deve ser capaz de estender um comportamento de uma classe, sem modificá-lo.
  • 38. { Open-Closed } public abstract class Shape { public abstract double Area(); } public class Rectangle : Shape { public double Width { get; set; } public double Height { get; set; } public override double Area() { return Width*Height; } } public class Circle : Shape{ public double Radius { get; set; } public override double Area() { return Radius*Radius*Math.PI; } } public class DrawProcess{ public static double Area(Shape[] shapes){ double area = 0; foreach (var shape in shapes) { area += shape.Area(); } return area; } }
  • 39. { Liskov Substitution } < Princípio da Substituição de Liskov /> As classes derivadas devem ser substituíveis por suas classes base.
  • 40. { Liskov Substitution } public class BaseClass { public string ProductName { get; set; } public virtual void Shipping(){ } public virtual void Order(){ } } public class DerivedClass :BaseClass{ public string CustomerInfo { get; set; } public void DeliveryAddress(){ } public override void Shipping(){ base.Shipping(); } public override void Order(){ base.Order(); } } public class Present { public static void Main() { var baseClass = new DerivedClass(); baseClass.ProductName = “XBox"; baseClass.Shipping(); baseClass.Order(); } }
  • 41. { Interface Segregation } < Princípio da Segregação da Interface /> Muitas interfaces específicas são melhores do que uma interface única.
  • 42. { Dependency Inversion } < Princípio da inversão da dependência /> Dependa de uma abstração e não de uma implementação.
  • 43. { Dependency Inversion } public interface IWorker { public void work(); } public class Worker implements IWorker{ public void work() { // ....working } } public class SuperWorker implements IWorker{ public void work() { //.... working much more } } public class Manager { IWorker worker; public void setWorker(IWorker w) { worker = w; } public void manage() { worker.work(); } } worker = w; } public void manage() { worker.work(); } }
  • 44. { Dependency Inversion } Containers de injeção de dependência: Exemplos: Microsoft Unity, Ninject, Spring, Spring.net, etc... Uso: 1) Registro da interface e tipo 2) Resolve e carrega o tipo registrado para a interface ou identificador
  • 45. { Container de DI / IOC – Microsoft Unity } public void RegisterTypes(){ var container = new UnityContainer(); container.RegisterType<ILivro, Livro>(); } public void Process(){ var livro = container.Resolve<ILivro>(); //Do something } Registro do tipo Resolve o tipo
  • 46. { ! }
  • 47. { Seja hoje um pessoa melhor do que você foi ontem }
  • 54. Obrigado :) E-mail: abrandao@mundipagg.com Skype: abrandao@mundipagg.com Twitter: @abrandaolustosa LinkedIn: abrandaol