Upload
aurelioduarte5614
View
231
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Padrões de design_ o padrão facade
Citation preview
Categories LearningGuides ExpertHelp
Code
New!
ThispostispartofaseriescalledDesignPatternsinPHP.
DesignPatterns:TheAdapterPattern
Portuguese(Portugus)translationbyFranciscoSousa(youcanalsoviewtheoriginal
Englisharticle)
Quandosetratadepadresdedesign,podesterquestes:
Porquequedevemosusarpadresdedesignemprogramao?Onossocdigopodefuncionarbemsemisso.
Quantoissoaminhaquestoseria:"Preferiasvivernumacasaluxuosa,ouemumsimplesestabelecimentocomquatroparedes?"Afinal,ambosservemonossopropsito.
Geralmente,nsprocuramosumacasaluxuosa,porqueestaoferecemelhorescondiesenecessitademenosmanuteno,eamanutenopodesserfeitacommenosaborrecimentoporqueotrabalhobsicojestl.
Amesmacoisaaplicaseaprogramao:Cdigoqueutilizapadresdedesignfcildeentender,fcildemanterefcildeestender.
OBJECTORIENTEDPROGRAMMING
Padresdedesign:opadrofacade(fachada)byAvinashZala 19Oct2014 0Comments Portugus
1
Nestasriedetutoriais,vamoscobrirdiferentespadresdedesign,queestodisponveisparansnaprogramao.Irsaprendersobreassuasvantagensedesvantagenseosfatoresqueindicamondeosdevesusar.
Aolongodestestutoriais,euireipegaremPHP,comolinguagembaseparademonstrarospadresdedesigncontudo,elessoatualmenteumconceitoquepodeserusadoemqualquerlinguagemdeprogramaoumaquestodemudarasintaxeparaalinguagempreferida.
Regrasdedesignsoseparadasemquatrocategorias:
PadresdecriaoPadresdeestruturaoPadresdecomportamentoPadresdeconcorrncia
Nestetutorial,nsvamoscobriropadrodedesignfacade(fachada).Eleassentanacategoriadospadresdeestruturao,porqueelelidacomooteucdigodeveserestruturadoparafazlosercompreensvelemantlobemconservadoalongoprazo.
PadrodeDesignFacade(fachada)
UML
ProblemaVamosassumirquetutensalgumasoperaesaseremfeitasemsequncia,equeamesmaaonecessriaemmltiplosstiosdentrodaaplicao.Tensquecolocaromesmocdigoemdiferentesstios.Fizesteisso,masapsalgunsdiasdescobresquealgotemquesermodificadonessecdigo.
Vsqualoproblema?Nstemosqueintroduziralteraesemtodososstiosondeessecdigoseencontra.aborrecido,no?
SoluoComosoluo,oquedeveriasestarafazercriarumcontroladorprincipalquelidasecomessecdigorepetido.Dopontodevistadachamada,siriamoschamaressecontrolador,paraexecutaraesbaseadanosparmetrosprovidenciados.
Agorasensnecessitssemosdeintroduzirqualqueralteraonoprocesso,entoiriamossimplesmentemodificarocontroladorprincipal,emvezdemodificarocdigoemtodososstiosondeusamosocdigo.
ExemploNestetutorial,vamosescolherumalioparaquefaaascoisasmaisclaras.Vamosdizerquefoiteatribudaatarefadeplanearocasamentodoteuamigo.Sefizerestudoportuaconta,imaginaascoisasquetensquefazer.Irscriarumagrandepossibilidadeparaerro,eaumentasamargemdeesqueceralgoquepodeafetardeformadrsticaocasamentodoteuamigo.
Nestecaso,emvezdefazerestudoportuaconta,devesusarumplaneadordecasamentoseteracertezaqueotrabalhoficafeitoebemgeridodeformaaquehajamenosoportunidadesparaerro.
Aqui,eststeacomportarcomoclientequeiniciaoprocesso,eoplaneadordocasamentoestatrabalharcomofacade(fachada)parati,completandootrabalhobaseadonatuadeciso.
Exemplodecdigo
Nestasecovamosvermaisumexemplo,oqualmuitocomumparawebsites,clarocomumexemplodecdigo.Iremosveraimplementaodopadrodedesignfacade(fachada)usandooprocessodecheckoutdeprodutos,masantesdeverificarmosocdigoperfeitocomopadrofacade(fachada),vamosdarumavistadeolhosaocdigoquetemoproblema.
Umprocessodecheckoutsimplesincluiosseguintespassos:
1. Adicionarumprodutoaocarrinho.2. Calcularataxadeenvio.3. Calcularodesconto.4. Geraraordem.
Problema
01 // Simple CheckOut Process
Nocdigoacima,irsverificarqueoprocedimentodecheckoutincluivriosobjetosquenecessitamdeserproduzidosemordemparacompletaraoperaodecheckout.Imaginaquetensqueimplementaresteprocessoemmltiplosstios.Seesseforocaso,seriaproblemticoquandoocdigotivessequequesermodificado.melhorfazerestasalteraesemtodososstiosdeumavez.
Advertisement
SoluoIremosescreveramesmacoisacomopadrofacade(fachada),oqualfazomesmocdigomaisfcildemanteredeestender.
0203040506070809101112131415161718192021
$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();}
01 class productOrderFacade {
0102030405060708091011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
5455
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() {
Apartirdeagora,nstemosafachada(facade)daordemdonossoprodutopreparada.Tudooquetemosquefazerusarcomalgunscanaisdecomunicaonocdigo,emvezdeummontedecdigocomofoimostradonaparteanterior.
Porfavorverificaaquantidadedecdigoabaixo,oqualprecisarsdeinvestirdeformaateresoprocessodecheckoutemmltiplasposies.
Agoraimaginaquandonecessitaresdefazeralteraesnoteuprocessodecheckout,simplesmentecriasalteraesnaclassefacade(fachada)quefoicriada,emvezdeintroduziresalteraesemtodososstiosondeelefoiaplicado.
Concluso
Simplificando,podemosdizerqueopadrofacade(fachada)deveserutilizadonumasituaoondenecessitasdeumanicainterfaceparacompletarmltiplosprocedimentos,comonoexemplodoplaneadordecasamentosqueestatrabalharcomofacade(fachada),paratucompletaresmltiplosprocedimentos.
Porfavor,deixaquaisquercomentriosouperguntasnofeedabaixo.
Sejaoprimeiroasabersobrenovastraduessiga@tutsplus_ptnoTwitter!
5556575859
private function placeOrder() { $order = new order(); $order->generateOrder(); }}
123456
// Note: We should not use direct get values for Database queries to prevent SQL injection$productID = $_GET['productId']; // Just 2 lines of code in all places, instead of a lengthy process everywhere$order = new productOrderFacade($productID);$order->generateOrder();
Advertisement
Difficulty:Intermediate
Length:Medium
Categories:
ObjectOrientedProgramming DesignPatterns PHP OOP
Translations:English/
Tuts+tutorialsaretranslatedintootherlanguagesbyourcommunitymembersyoucanbeinvolvedtoo!
Translatethispost
Translationspoweredby
AboutAvinashZala
+ExpandBio
Avinashisacoderwithoversixyearsofexperienceinwebdevelopment.Withastrongfocusonqualityandusability,heisinterestedindeliveringcuttingedgeapplications.Heisreadytoworkonresponsiveapplicationstargetedtovariousdevices.HegraduatedwithabachelordegreeinInformation
Technology.Ifyou'dliketostayuptodateonhisactivities,refertohisblogorfollowhimonTwitterandFacebook.
Advertisement
SuggestedTuts+Course
RelatedTutorials
Jobs
AdvancedOOPInPHPWithTests $15
DesignPatterns:TheObserverPatternCode
DesignPatterns:TheSingletonPatternCode
DesignPatterns:TheStrategyPatternCode
ComcastFrontEndWebDeveloperatComcastinPhiladelphia,PA,USA
SeniorWordPressDeveloperatVidstoreinDenver,CO,USA
EnvatoMarketItem
0Comentrios Tuts+Hub Iniciarsesso1
Partilhar Mostrarprimeiroosmaisvotados
Deixeoseucomentrio...
Sejaoprimeiroacomentar!
Subscrever SabermaisacercadoDisqusd Privacidade
Recomendar
Advertisement
19,868 Tutorials 559 VideoCourses
Customdigitalserviceslikelogodesign,WordPressinstallation,videoproductionandmore.
CheckoutEnvatoStudio
Buildanythingfromsocialnetworkstofileuploadsystems.BuildfasterwithprecodedPHPscripts.
BrowsePHPonCodeCanyon
Teachingskillstomillionsworldwide.
FollowUs
HelpandSupport
FAQTermsofUseContactSupportAboutTuts+AdvertiseTeachatTuts+TranslateforTuts+Meetups
EmailNewsletters
GetTuts+updates,news,surveys&offers.
EmailAddress
Subscribe
PrivacyPolicy
2015EnvatoPtyLtd.Trademarksandbrandsarethepropertyoftheirrespectiveowners.