SlideShare ist ein Scribd-Unternehmen logo
1 von 27
De 2012 à 2014
Ivan Paulovich
www.100loop.com
1995
Princípios de OO
1995
Princípios de OO
2002
PPP
2015 e 2017
Adaptive Code (.NET)
Por que investir em modelagem?
https://martinfowler.com/bliki/DesignStaminaHypothesis.html
Single Responsibility Principle
Open Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
SRP
Single Responsibility Principle
• Geralmente a versão B é um código melhor
SRP
Versão A Versão B
Single Responsibility Principle
• Violação do SRP.
• Regras de negócio e Persistência quase sempre não devem se
misturar.
• Regras de negócio mudam frequentemente.
SRP
SRP
OCP
OCP
Open Closed Principle
Cliente Fechado para Extensão
Cliente Aberto para Extensão
OCP
foreach (var funcionario in Funcionarios)
{
if(funcionario is Manager)
{
_printer.PrintManager(funcionario as Manager);
}
else
{
_printer.PrintEmployee(funcionario);
}
}
LSP
public interface IRepository<T>
{
T GetById(int id);
IEnumerable<T> List();
void Create(T item);
void Update(T item);
void Delete(T item);
}
ISP
ISP
public interface IReadRepository<T>
{
T GetById(int id);
IEnumerable<T> List();
}
public interface IWriteRepository<T>
{
void Create(T item);
void Update(T item);
void Delete(T item);
}
public interface IRepository<T> :
IReadRepository<T>, IWriteRepository<T>
{
}
public void CheckOut()
{
MailMessage myMessage = new MailMessage(
"loja@minhaloja.com",
"usuario@minhaloja.com",
"Seu pedido foi recebido.",
"Obrigado!");
SmtpClient smptClient = new SmtpClient("localhost");
smtpClient.Send(myMessage);
}
DIP
public interface ISendEmail
{
void SendMail(string to, string from,
string subject, string body);
}
public class LiveSmtpMailer : ISendEmail
{
void SendMail(string to, string from,
string subject, string body)
{
MailMessage myMessage = new MailMessage(from, to,
subject, body);
SmtpClient smptClient = new SmtpClient("localhost");
smtpClient.Send(myMessage);
}
}
DIP
public class Cart
{
private ISendEmail _emailProvider;
public Cart(ISendEmail emailProvider)
{
_emailProvider = emailProvider;
}
public void Checkout()
{
this.emailProvider.SendMail(
"loja@minhaloja.com",
"usuario@minhaloja.com",
"Seu pedido foi recebido.",
"Obrigado!");
}
} DIP
Negócio
User Interface
Acesso a Dados
Infraestrutura
Outras
Externas Rede
http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfO
od

Weitere ähnliche Inhalte

Mehr von Ivan Paulovich

Mercado de ti e suas oportunidades
Mercado de ti e suas oportunidadesMercado de ti e suas oportunidades
Mercado de ti e suas oportunidades
Ivan Paulovich
 
Construindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalRConstruindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalR
Ivan Paulovich
 
Levando sua aplicação para a nuvem
Levando sua aplicação para a nuvemLevando sua aplicação para a nuvem
Levando sua aplicação para a nuvem
Ivan Paulovich
 
Conhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web APIConhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web API
Ivan Paulovich
 
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptCriando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Ivan Paulovich
 

Mehr von Ivan Paulovich (20)

DDD Tactical Design with Clean Architecture - Ivan Paulovich
DDD Tactical Design with Clean Architecture - Ivan PaulovichDDD Tactical Design with Clean Architecture - Ivan Paulovich
DDD Tactical Design with Clean Architecture - Ivan Paulovich
 
Clean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipClean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software Craftsmanship
 
Clean Architecture Essentials @ivanpaulovich
Clean Architecture Essentials @ivanpaulovichClean Architecture Essentials @ivanpaulovich
Clean Architecture Essentials @ivanpaulovich
 
Building rich domain models with ddd and tdd ivan paulovich - betsson
Building rich domain models with ddd and tdd   ivan paulovich - betssonBuilding rich domain models with ddd and tdd   ivan paulovich - betsson
Building rich domain models with ddd and tdd ivan paulovich - betsson
 
Moving to Microservices
Moving to MicroservicesMoving to Microservices
Moving to Microservices
 
Produzindo e consumindo um stream de eventos
Produzindo e consumindo um stream de eventosProduzindo e consumindo um stream de eventos
Produzindo e consumindo um stream de eventos
 
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
 
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crechesComo uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
 
Aggregates com Event Sourcing
Aggregates com Event SourcingAggregates com Event Sourcing
Aggregates com Event Sourcing
 
Estudo do eShopOnContainers
Estudo do eShopOnContainersEstudo do eShopOnContainers
Estudo do eShopOnContainers
 
Introdução ao Domain-Driven-Design (DDD)
Introdução ao Domain-Driven-Design (DDD)Introdução ao Domain-Driven-Design (DDD)
Introdução ao Domain-Driven-Design (DDD)
 
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHUtilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
 
Windows Azure Mobile Services InfoTech 2014
Windows Azure Mobile Services InfoTech 2014Windows Azure Mobile Services InfoTech 2014
Windows Azure Mobile Services InfoTech 2014
 
Mercado de ti e suas oportunidades
Mercado de ti e suas oportunidadesMercado de ti e suas oportunidades
Mercado de ti e suas oportunidades
 
Construindo Apps Com SignalR
Construindo Apps Com SignalRConstruindo Apps Com SignalR
Construindo Apps Com SignalR
 
Construindo apps de tempo real com SignalR
Construindo apps de tempo real com SignalRConstruindo apps de tempo real com SignalR
Construindo apps de tempo real com SignalR
 
Construindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalRConstruindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalR
 
Levando sua aplicação para a nuvem
Levando sua aplicação para a nuvemLevando sua aplicação para a nuvem
Levando sua aplicação para a nuvem
 
Conhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web APIConhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web API
 
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptCriando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
 

Princípios SOLID de OO usando .NET

Hinweis der Redaktion

  1. Inversão de Dependências
  2. The first five principles are principles of class design