Padrões de design_ o padrão facade (fachada) - Tuts+ Code Tutorial

12
Categories Learning Guides Expert Help Code New! This post is part of a series called Design Patterns in PHP. Design Patterns: The Adapter Pattern Portuguese (Português) translation by Francisco Sousa (you can also view the original English article) Quando se trata de padrões de design, podes ter questões: Porque é que devemos usar padrões de design em programação? O nosso código pode funcionar bem sem isso. Quanto à isso a minha questão seria: "Preferias viver numa casa luxuosa, ou em um simples estabelecimento com quatro paredes?" Afinal, ambos servem o nosso propósito. Geralmente, nós procuramos uma casa luxuosa, porque esta oferece melhores condições e necessita de menos manutenção, e a manutenção podes ser feita com menos aborrecimento porque o trabalho básico já está lá. A mesma coisa aplicase a programação: Código que utiliza padrões de design é fácil de entender, fácil de manter e é fácil de estender. OBJECTORIENTED PROGRAMMING Padrões de design: o padrão facade (fachada) by Avinash Zala 19 Oct 2014 0 Comments Português 1

description

Padrões de design_ o padrão facade

Transcript of Padrões de design_ o padrão facade (fachada) - Tuts+ Code Tutorial

  • 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.