Você está na página 1de 12

Code

Categories

LearningGuides

ExpertHelp

New!

OB J E C TOR IE N TE D P R OG RA MMI NG

Padresdedesign:opadro
facade(fachada)
byAvinashZala

19Oct2014

0Comments

Portugus

ThispostispartofaseriescalledDesignPatternsinPHP.
DesignPatterns:TheAdapterPattern

Portuguese(Portugus)translationbyFranciscoSousa(youcanalsoviewtheoriginal
Englisharticle)

Quandosetratadepadresdedesign,podesterquestes:

Porquequedevemosusarpadresdedesignem
programao?Onossocdigopodefuncionarbem
semisso.
Quantoissoaminhaquestoseria:"Preferiasvivernumacasaluxuosa,ouemum
simplesestabelecimentocomquatroparedes?"Afinal,ambosservemonosso
propsito.
Geralmente,nsprocuramosumacasaluxuosa,porqueestaoferecemelhores
condiesenecessitademenosmanuteno,eamanutenopodesserfeitacom
menosaborrecimentoporqueotrabalhobsicojestl.
Amesmacoisaaplicaseaprogramao:Cdigoqueutilizapadresdedesign
fcildeentender,fcildemanterefcildeestender.

Nestasriedetutoriais,vamoscobrirdiferentespadresdedesign,queesto
disponveisparansnaprogramao.Irsaprendersobreassuasvantagense
desvantagenseosfatoresqueindicamondeosdevesusar.
Aolongodestestutoriais,euireipegaremPHP,comolinguagembasepara
demonstrarospadresdedesigncontudo,elessoatualmenteumconceitoque
podeserusadoemqualquerlinguagemdeprogramaoumaquestodemudar
asintaxeparaalinguagempreferida.
Regrasdedesignsoseparadasemquatrocategorias:
Padresdecriao
Padresdeestruturao
Padresdecomportamento
Padresdeconcorrncia
Nestetutorial,nsvamoscobriropadrodedesignfacade(fachada).Eleassenta
nacategoriadospadresdeestruturao,porqueelelidacomooteucdigodeve
serestruturadoparafazlosercompreensvelemantlobemconservadoalongo
prazo.

PadrodeDesignFacade(fachada)
UML

Problema
Vamosassumirquetutensalgumasoperaesaseremfeitasemsequncia,eque
amesmaaonecessriaemmltiplosstiosdentrodaaplicao.Tensque
colocaromesmocdigoemdiferentesstios.Fizesteisso,masapsalgunsdias
descobresquealgotemquesermodificadonessecdigo.
Vsqualoproblema?Nstemosqueintroduziralteraesemtodososstios
ondeessecdigoseencontra.aborrecido,no?

Soluo
Comosoluo,oquedeveriasestarafazercriarumcontroladorprincipalquelida
secomessecdigorepetido.Dopontodevistadachamada,siriamoschamar
essecontrolador,paraexecutaraesbaseadanosparmetrosprovidenciados.

Agorasensnecessitssemosdeintroduzirqualqueralteraonoprocesso,ento
iriamossimplesmentemodificarocontroladorprincipal,emvezdemodificaro
cdigoemtodososstiosondeusamosocdigo.

Exemplo
Nestetutorial,vamosescolherumalioparaquefaaascoisasmaisclaras.
Vamosdizerquefoiteatribudaatarefadeplanearocasamentodoteuamigo.Se
fizerestudoportuaconta,imaginaascoisasquetensquefazer.Irscriaruma
grandepossibilidadeparaerro,eaumentasamargemdeesqueceralgoquepode
afetardeformadrsticaocasamentodoteuamigo.
Nestecaso,emvezdefazerestudoportuaconta,devesusarumplaneadorde
casamentoseteracertezaqueotrabalhoficafeitoebemgeridodeformaaque
hajamenosoportunidadesparaerro.
Aqui,eststeacomportarcomoclientequeiniciaoprocesso,eoplaneadordo
casamentoestatrabalharcomofacade(fachada)parati,completandootrabalho
baseadonatuadeciso.

Exemplodecdigo
Nestasecovamosvermaisumexemplo,oqualmuitocomumparawebsites,
clarocomumexemplodecdigo.Iremosveraimplementaodopadrodedesign
facade(fachada)usandooprocessodecheckoutdeprodutos,masantesde
verificarmosocdigoperfeitocomopadrofacade(fachada),vamosdarumavista
deolhosaocdigoquetemoproblema.
Umprocessodecheckoutsimplesincluiosseguintespassos:
1. Adicionarumprodutoaocarrinho.
2. Calcularataxadeenvio.
3. Calcularodesconto.
4. Geraraordem.

Problema
01

// Simple CheckOut Process

02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21

$productID = $_GET['productId'];
$qtyCheck = new productQty();
if($qtyCheck->checkQty($productID) > 0) {
// Add Product to Cart
$addToCart = new addToCart($productID);
// Calculate Shipping Charge
$shipping = new shippingCharge();
$shipping->updateCharge();
// Calculate Discount Based on
$discount = new discount();
$discount->applyDiscount();
$order = new order();
$order->generateOrder();
}

Nocdigoacima,irsverificarqueoprocedimentodecheckoutincluivriosobjetos
quenecessitamdeserproduzidosemordemparacompletaraoperaode
checkout.Imaginaquetensqueimplementaresteprocessoemmltiplosstios.Se
esseforocaso,seriaproblemticoquandoocdigotivessequequeser
modificado.melhorfazerestasalteraesemtodososstiosdeumavez.

Advertisement

Soluo
Iremosescreveramesmacoisacomopadrofacade(fachada),oqualfazomesmo
cdigomaisfcildemanteredeestender.
01

class productOrderFacade {

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

class productOrderFacade {
public $productID = '';
public function __construct($pID) {
$this->productID = $pID;
}
public function generateOrder() {
if($this->qtyCheck()) {
// Add Product to Cart
$this->addToCart();
// Calculate Shipping Charge
$this->calulateShipping();
// Calculate Discount if any
$this->applyDiscount();
// Place and confirm Order
$this->placeOrder();
}
}
private function addToCart () {
/* .. add product to cart ..
}

*/

private function qtyCheck() {


$qty = 'get product quantity from database';
if($qty > 0) {
return true;
} else {
return true;
}
}

private function calulateShipping() {


$shipping = new shippingCharge();
$shipping->calculateCharge();
}
private function applyDiscount() {
$discount = new discount();
$discount->applyDiscount();
}

private function placeOrder() {

55
56
57
58
59

private function placeOrder() {


$order = new order();
$order->generateOrder();
}
}

Apartirdeagora,nstemosafachada(facade)daordemdonossoproduto
preparada.Tudooquetemosquefazerusarcomalgunscanaisdecomunicao
nocdigo,emvezdeummontedecdigocomofoimostradonaparteanterior.
Porfavorverificaaquantidadedecdigoabaixo,oqualprecisarsdeinvestirde
formaateresoprocessodecheckoutemmltiplasposies.
1
2
3
4
5
6

// Note: We should not use direct get values for Database queries to prevent S
$productID = $_GET['productId'];

// Just 2 lines of code in all places, instead of a lengthy process everywhere


$order = new productOrderFacade($productID);
$order->generateOrder();

Agoraimaginaquandonecessitaresdefazeralteraesnoteuprocessode
checkout,simplesmentecriasalteraesnaclassefacade(fachada)quefoicriada,
emvezdeintroduziresalteraesemtodososstiosondeelefoiaplicado.

Concluso
Simplificando,podemosdizerqueopadrofacade(fachada)deveserutilizado
numasituaoondenecessitasdeumanicainterfaceparacompletarmltiplos
procedimentos,comonoexemplodoplaneadordecasamentosqueestatrabalhar
comofacade(fachada),paratucompletaresmltiplosprocedimentos.
Porfavor,deixaquaisquercomentriosouperguntasnofeedabaixo.
Sejaoprimeiroasabersobrenovastraduessiga@tutsplus_ptnoTwitter!

Advertisement

Difficulty:
Intermediate
Length:
Medium
Categories:
ObjectOrientedProgramming

DesignPatterns

PHP

OOP

Translations:
English

Tuts+tutorialsaretranslatedintootherlanguagesbyourcommunitymembersyoucanbeinvolvedtoo!
Translatethispost

Translationspoweredby

AboutAvinashZala
Avinashisacoderwithoversixyearsofexperienceinwebdevelopment.Withastrongfocusonquality
andusability,heisinterestedindeliveringcuttingedgeapplications.Heisreadytoworkonresponsive
applicationstargetedtovariousdevices.HegraduatedwithabachelordegreeinInformation
Technology.Ifyou'dliketostayuptodateonhisactivities,refertohisblogorfollowhimonTwitterand
Facebook.

+ExpandBio

Advertisement

SuggestedTuts+Course

AdvancedOOPInPHPWithTests

RelatedTutorials
DesignPatterns:TheObserverPattern
Code

DesignPatterns:TheSingletonPattern
Code

DesignPatterns:TheStrategyPattern
Code

Jobs
ComcastFrontEndWebDeveloper
atComcastinPhiladelphia,PA,USA

SeniorWordPressDeveloper
atVidstoreinDenver,CO,USA

$15

EnvatoMarketItem

0Comentrios
Recomendar

Tuts+Hub

Partilhar

Mostrarprimeiroosmaisvotados

Deixeoseucomentrio...

Sejaoprimeiroacomentar!

Subscrever

Iniciarsesso

SabermaisacercadoDisqus

Advertisement

Privacidade

Teachingskillstomillionsworldwide.
19,868 Tutorials

559 VideoCourses

FollowUs

HelpandSupport
FAQ
TermsofUse
ContactSupport
AboutTuts+
Advertise
TeachatTuts+
TranslateforTuts+
Meetups
EmailNewsletters
GetTuts+updates,news,surveys&
offers.
EmailAddress
Subscribe
PrivacyPolicy

Customdigitalserviceslikelogodesign,WordPressinstallation,video
productionandmore.
CheckoutEnvatoStudio

Buildanythingfromsocialnetworkstofileuploadsystems.Buildfasterwith
precodedPHPscripts.
BrowsePHPonCodeCanyon

2015EnvatoPtyLtd.Trademarksandbrandsarethepropertyoftheirrespectiveowners.

Você também pode gostar