Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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 ..
}
*/
55
56
57
58
59
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'];
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.