Anda di halaman 1dari 10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

BT Sobrens Sobrevoc OurContributorTeam PurposeIndex Novidadessobre:

Disseminandoconhecimentoeinovaoemdesenvolvimentodesoftwarecorporativo.
Textoapesquisar

Login

En| | | Fr| Brasil Desenvolvimento Java .Net CloudComputing Mobile HTML5 JavaScript Ruby DSLs Python PaaS

Destaquesde:Desenvolvimento
ComopublicarumaaplicaoASP.NETMVC4noAzure?

VejaospassosparasecriarumaaplicaonoASP.NETMVC4combancodedadosepubliclanoAzureemminutos.Nesta palestra,VinciusmostraumpassoapassoparaapublicaonoAzure,asvantagensdestecenrioeasfacilidadesqueasferramentasda Microsoftnosoferecem. VertodosdeDesenvolvimento Arquitetura eDesign Modelagem Performance& Escalabilidade BDD AOP DesignPattern Segurana

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

1/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

CloudComputing SOA

Destaquesde:ArquiteturaeDesign
JusBrasil:Comomanteredisponibilizaramaiorbasededadosjurdicosdopaspara10milhesdebrasileirospor ms.

OJusBrasilsurgiucomoumsimplesagregadordenotciasparaosprofissionaisdoDireito,cresceuexponencialmenteehoje detmamaiorbasedeinformaespblicasdopas.Conheaaarquiteturaeosaprendizadosdaempresanesseprocessodeescalamacia. VertodosdeArquiteturaeDesign Processos ePrticas Agile Leadership Tcnicasgeis Metodologias IntegraoContnua Lean/Kanban ClienteseRequisitos

Destaquesde:ProcessosePrticas
ScrumMaster:PosioouPapel?

UmaidiacomumecompartilhadapormuitosadequeequipesScrumprecisamdeumScrumMaster(SM)dedicado.Para equipesnovas,issoatfazalgumsentido.Masmedidaqueasequipesamadurecem,elasaindaprecisamdeumSMdedicado?PodeumSMter vriasequipes?Podeaequipeassumirestepapelpormeiodeumdeseusintegrantes? VertodosdeProcessosePrticas Operaes eInfraestrutura Performance& Escalabilidade CloudComputing Virtualizao ServidoresdeAplicao

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

2/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

Destaquesde:OperaeseInfraestrutura
ControlandoasVersesdeseuBancodeDadoscomMigrations

UmavezemproduooBDtemestadoealteraesemtabelaspodemresultaremperdadedadosouumbancoinconsistente. Conheaferramentaseframeworksparalidarcomesseproblema,donovoEntityFrameworkCodeFirstMigrationsasoluesopensourcepara outrosbancos,ecomoatualizartudoissoemumambientedeintegraocontnua. VertodosdeOperaeseInfraestrutura Arquitetura Corporativa ArquiteturaCorporativa BPM Business/ITAlignment Integration(EAI) Governana Web2.0 SOA

Destaquesde:ArquiteturaCorporativa
DesenvolvimentodeviewsparaaplicativosAndroid

NessaentrevistaconversamoscomJonasAlvessobreodesenvolvimentodeaplicativosparaAndroid.Abordamosassuntos comoacriaodeinterfacesparadiferentesresoluesdetelas,testesunitrios,boasprticasadotadasnodesenvolvimentodasinterfacese sugestesdoquepodeounoserutilizadonosaplicativosAndroid. VertodosdeArquiteturaCorporativa SoPaulo2014 9a11deabril Agile Java Mobile HTML5 JavaScript CloudComputing Todosostpicos
Novodesign

Vocestaqui:IncioNotciasNoserepita?DRYeodilemaentrecdigoduplicadoealtoacoplamento

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

3/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

Noserepita?DRYeodilemaentrecdigoduplicadoealto acoplamento
porAbelAvram,traduzidoporRafaelSakuraiem16Jul2012|Dsuaopinio Compartilhar |

"Marcarcomofavorito" "Favoritos" OprincpioDRY("noserepita")buscareduziraduplicaodecdigoeosproblemasdemanutenoresultantes,masquandomalaplicado aumentaoacoplamentoeatrapalhaaleituradocdigo.Conheaaopiniodevriosespecialistassobreoprincpio,suasaplicaesearmadilhas. DRYumaabreviaoparaoinglsDon'tRepeatYourself,"NoseRepita".oprimeiroprincpiododesenvolvimentodesoftwaremencionadopor AndyHunteDaveThomasnoclssicolivroOProgramadorPragmtico:deaprendizamestre.Oprincpiodeclaraque: Cadapartedoconhecimentodeveterumarepresentaonica,noambguaedefinitvadentrodosistema. Nessecontexto,HuntenfatizaoimpactonegativodaduplicaoeconsequentementeaimportnciadeusarDRY,nowikidorepositriodepadresde Portland: Aduplicao(sejaelaacidentalouproposital)podelevarapesadelosdemanuteno,almdeatrapalhararefatoraoegerar contradieslgicas. Aduplicaoeapossibilidadedecontradiespodemsurgiremqualquerlugar:naarquitetura,emrequisitos,cdigooudocumentao. Osefeitospodemvariardesdefalhasdeimplementaodecdigo,confusodosdesenvolveresatafalhacompletadosistema. PodeseargumentarqueamaiordificuldadenaremediaodoproblemadoAno2000,veiodafaltadeumasimplesabstraodedatas dentrodeumsistemaoconhecimentodasdataseoseutratamentoeramespalhadopormuitaspartes. EmboraoDRYpareaumprincpioobrigatrionaengenhariadesoftware,AndersMunchalertaquehexcees: Nohproblematermaisqueumarepresentaoparaumpedaodeconhecimento,sehouverummecanismoeficazquegarantaa consistnciaentreospedaos.Consideresealgunscasos: DefiniesedeclaraesdefunesemC:estogeralmentesincronizadas,porqueocompiladorinformaasinconsistncias, forandooprogramadoratomaralgumaao Testesunitrios:apresenadeinconsistnciassignificaqueotesteirfalhar,novamenteforandoquealgumtomealgumaatitude Cdigogeradoautomaticamente:aregeneraoperidicagaranteaconsistncia. EstasexceesnaverdadereforamasrazesportrsdoDRY,masumaquestodeveserlevadaemconta:osprogramadoresnoestariamlevandoo princpiodoDRYaosextremos?NoestariaoDRYsendomalcompreendidooumalutilizado? Quantoaisso,afirmaDaveThomas: AmaioriadaspessoasinterpretamoDRYcomo'nodupliquecdigo'.Masessanoainteno.AideiaportrsdoDRYmuitomais ampla. ThomasexpandeoprincpiodoDRYparatodoumsistemadesoftware: ODRYdizquecadapedaodeconhecimentodosistemadeveterumarepresentaodefinitivaenoambguaquecadaumdesses pedaosnodesenvolvimentodealgumacoisadeveterumarepresentaonica.Oconhecimentodosistemamuitomaisabrangenteque apenasocdigo.Incluitambmesquemasdebasededados,planosdetestes,osistemadebuildseatmesmoadocumentao. Dadotodoesseconhecimento,porquedevemosencontrarapenasumamaneirapararepresentarcadacaracterstica?Arespostabvia

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

4/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

quesehmaisdeumamaneiraparaexpressaramesmacoisa,emalgummomentohaverduasoutrsrepresentaesdiferentesqueiro ficarinconsistentesentresi.Mesmoquenofiquem,havertrabalhoemmanterasrepresentaesalinhadassemprequeumaalterao ocorrer.Emudanasiroocorrer.ODRYimportantequandosequersoftwareflexvelefcildemanter. Oproblemacomorepresentartodasestasdiferentespartesdeconhecimentosomenteumavez.Seforapenascdigo,entosepode obviamenteorganizloparaquenoserepita,comajudademtodosesubrotinas.Mascomotratardecoisascomoesquemasdebasede dados?aqueseaplicamoutrastcnicasdolivro[PragmaticProgrammer],comoousodeferramentasdegeraodecdigo,sistemasde automaodebuildselinguagensdescript.Estastcnicaspermitemrepresentaesnicasedefinitivasqueirogerarprodutosdetrabalho nodefinitivoscomocdigosouDDLs(linguagemdedescriodedados). ApesardeasquestessobreousodoDRYpareceremtersidoresolvidashumbomtempo,oprincpiofoimencionadonovamentenoQCon2012de Londresporvriospalestrantes,incluindoGregYoungeDanNorth.Esteltimochamouatenoparapossveiserrosnasuaaplicao.OuvimosGreg YoungsobreosproblemasdoDRY: OargumentobsicocontraseguiroDRYquehumoutroladodaquesto.Quandoseguimosoprincpio,muitocomumque desenvolvedorescomecemaadicionaracoplamentosecomplexidadeaosseussoftwares.Umladomuitomaisfcildemedir:a quantidadedetentativasporhoradeeditar/compilar/testar,quandoprecisocorrigirbugsemmuitoslocaisjooutroladomaisdifcilde mensurar:oacoplamentoeacomplexidadeembutidosnosoftwareemnomedoDRY. PodeseargumentarqueseoDRYforseguido"corretamente"nuncahaveracoplamentoecomplexidadedentrodosoftware.Istoat possvelpossoescrevercdigosqueseguemperfeitamenteoDRY,semintroduziracoplamentoecomplexidade.Masissopressupeque meuconhecimentosejaperfeito. OInfoq.comtambmouviuDavidChelimsky,autorelderdedesenvolvimentodoRSpec.EleafirmaqueviuoDRYsendousadoato"nvelde linhadecdigo,oquenemsempreapropriado(emboraalgumasvezespossaserusadoassim)".Eleapresentaoseguinteexemplo:
d e s c r i b e" P e r s o n # f u l l _ n a m e "d o i t" c o n c a t st h ef i r s ta n dl a s tn a m e s "d o f i r s t _ n a m e=" J o h n " l a s t _ n a m e=" D o e " p e r s o n=P e r s o n . n e w ( : f i r s t _ n a m e= >f i r s t _ n a m e ,: l a s t _ n a m e= >l a s t _ n a m e ) p e r s o n . f u l l _ n a m e . s h o u l de q" # { f i r s t _ n a m e }# { l a s t _ n a m e } " e n d e n d

EmboraestepedaodecdigoeviteduplicaesepossaparecerumaboaimplementaodoDRY,Chelimskypreferecdigomaislegvel:
d e s c r i b e" P e r s o n # f u l l _ n a m e "d o i t" c o n c a t st h ef i r s ta n dl a s tn a m e s "d o p e r s o n=P e r s o n . n e w ( : f i r s t _ n a m e= >" J o h n " ,: l a s t _ n a m e= >" D o e " ) p e r s o n . f u l l _ n a m e . s h o u l de q" J o h nD o e " e n d e n d

Eacrescenta: UmapessoaquenoentendeoDRYeachaqueoprincpiodeveserobedecidoreligiosamente,podeestranharver"John"e"Doe"duas vezesnesteltimoexemplo.Paramimocontrrio.Naversocomrepetio,ficamaisfcilvisualizarorelacionamentoentreoprimeiro eoltimonomeseasadanofull_name. ChelimskytambmdestacaoutrotrechodecdigoqueencontrourecentementenoframeworkObjectify.


1d e fr e q u e s t _ r e s o l v e r 2 k l a s s=O b j e c t i f y : : N a m e d V a l u e R e s o l v e r L o c a t o r 3 @ r e q u e s t _ r e s o l v e r| | =k l a s s . n e w . t a pd o| r e s o l v e r 4 r e s o l v e r . a d d ( : c o n t r o l l e r ,s e l f ) 5 r e s o l v e r . a d d ( : p a r a m s ,p a r a m s ) 6 r e s o l v e r . a d d ( : s e s s i o n ,s e s s i o n ) 7 r e s o l v e r . a d d ( : c o o k i e s ,c o o k i e s ) 8 r e s o l v e r . a d d ( : r e q u e s t ,r e q u e s t ) 9 r e s o l v e r . a d d ( : r e s p o n s e ,r e s p o n s e ) 1 0 r e s o l v e r . a d d ( : f l a s h ,f l a s h ) 1 1 r e s o l v e r . a d d ( : r e n d e r e r ,R e n d e r e r . n e w ( s e l f ) ) 1 2 e n d 1 3e n d

Nele,aslinhas3a11foramsubstitudaspor:
{ : c o n t r o l l e r= >s e l f ,: p a r a m s= >p a r a m s ,: s e s s i o n= >s e s s i o n ,: c o o k i e s= >c o o k i e s ,: r e q u e s t= >r e q u e s t , : r e s p o n s e= >r e s p o n s e ,: f l a s h= >f l a s h ,: r e n d e r e r= >R e n d e r e r . n e w ( s e l f )} . e a c hd o| k e y ,v a l u e |r e s o l v e r . a d d ( k e y ,v a l u e ) e n d

Sobreaalterao,dizChelimsky:"Naminhaopinio,oDRYestsendolevadolongedemais.Otrechoeramaisfcildemanterantesdaalterao". SegundoChelimsky"aspalavras'Noserepita'deviamfuncionarapenascomoumlembreterpido,masacabaramsetornandoumprincpiogeralpara muitaspessoas".Eledestacaoacoplamentogeradopelousoexcessivo: Quandodoismtodosdomesmoobjetofazemasmesmascoisas,tipicamenteextramosumterceiromtodoqueambososmtodos

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

5/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

originaisirochamar.Comisso,osmtodosoriginaisficamacopladosaomtodoextradoeindiretamenteumaooutro.Istoparecelgico einofensivonocontextodeumnicoobjeto,masequandoreconhecemoscomportamentossimilaresentredoisoumaisobjetos? Paraeliminaraduplicao,temosqueintroduzirumnovoobjeto,queserumadependnciadosdoisobjetosoriginaisouaindapior(e maiscomum),fazerumdosobjetosoriginaisdependerdooutro.Essaabordagemcriadependnciasartificiaisentreobjetosno relacionados,reduzindosuacapacidadedeevoluiraolongodotempo.Introduzirumnovoobjetoaumentaconsideravelmentea "superfcie"dosistema,edeveserfeitocomcuidadoereflexo,oquenemsempreocorreemrefatoraes. ParaevitarousoextremodoDRY,Chelimskypropebalancearseuusocomodeoutrosprincpiosdedesenvolvimento: ODRYimportante,masosprincpiosSOLIDdeUncleBob,porexemplo,ououtrosconceitosmaisamploscomobaixoacoplamentoe altacoeso,soigualmenteimportantes.Nosuficienteapenasaplicarumprincpiootempotododeveselevaremcontatodosos princpiosepesarseusvaloresrelativosdeacordocomasituao.comosaberqualtemperodevesercolocadonopeixeequaladicionar nacarne.Algunsfuncionamnosdoiscasosoutrosnemtanto. Sections ProcessosePrticas Desenvolvimento Topics AcoplamentoBaixo DRY MelhoresPrticas Contedoeditorialrelacionado

Agilidadesolitria:tornandoseAgileantesdaprpriaequipe LivroDesigndeAPIsWebCriandoInterfacesqueosDesenvolvedoresAdoram AkkaToolkit2.3comJava8esuporteapersistncia CoffeeScript1.7:encadeamentosemparnteses,Stringsdemltiplaslinhasemais ComopublicarumaaplicaoASP.NETMVC4noAzure?


Contedorelacionadodepatrocinadores

CriandoCulturaseEquipesqueFuncionamnoQConSP2014:Colaborao,princpioseaprendizadoparaomximo desempenhoemtimesdesoftware UmGuiaPrticosobreOAutheSeguranadeAPIs JavanaCristadaOnda,noQConSP2014:Inovaesemplataformas,frameworks,APIselinguagensdaJVM LinguagensfuncionaisedinmicasnoQConSP2014:turbinandootrabalhododesenvolvedorpoliglota 5PilaresdoGerenciamentodeAPIs

Olvisitante
VocprecisacadastrarsenoInfoQBrasilouLoginparaenviarcomentrios.Hmuitasvantagensemsecadastrar.

ObtenhaomximodaexperinciadoInfoQBrasil.
Dsuaopinio
M e n s a g e m

Forneaumassunto

HTMLpermitido:a,b,br,blockquote,i,li,pre,u,ul,p Recebermenssagensdessadiscusso
Enviarmensagem

ComentriosdacomunidadeWatchThread Fechar

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

6/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

by em Visualizar Responder Voltaraotopo Fechar Citarmensagemoriginal Assunto Suaresposta

HTMLpermitido:a,b,br,blockquote,i,li,pre,u,ul,p Recebermenssagensdessadiscusso Cancelar Fechar


Enviarmensagem

Assunto

Suaresposta

HTMLpermitido:a,b,br,blockquote,i,li,pre,u,ul,p Recebermenssagensdessadiscusso Cancelar Fechar


OK

Contedoeducacional
Todos Artigos Apresentaes Entrevistas Livros

ComopublicarumaaplicaoASP.NETMVC4noAzure?
VinciusSouza21Mar,2014

JavanomundodosEmbarcados
GustavoLeite20Mar,2014

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

7/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

AdfromVimeoDownloadVideos[X]

JusBrasil:Comomanteredisponibilizaramaiorbasededadosjurdicosdopaspara10 milhesdebrasileirosporms.
LeonardoGamas,OsvaldoMatos20Mar,2014

ControlandoasVersesdeseuBancodeDadoscomMigrations
AndreCarlucci19Mar,2014

OtimizaodeperformancenaWeb:desafiosdomundomobile
SrgioLopes18Mar,2014

ConstruindoumframeworkCSS
DiegoEis13Mar,2014

Maisantigos Linkspatrocinados Desenvolvimento CoffeeScript1.7:encadeamentosemparnteses,Stringsdemltiplaslinhasemais ComopublicarumaaplicaoASP.NETMVC4noAzure? JavanomundodosEmbarcados ArquiteturaeDesign

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

8/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

AkkaToolkit2.3comJava8esuporteapersistncia JusBrasil:Comomanteredisponibilizaramaiorbasededadosjurdicosdopaspara10milhesdebrasileirosporms. ConstruindoumframeworkCSS ProcessosePrticas ScrumMaster:PosioouPapel? SubmissesparaShortTalks&7motivosparaparticipardoQConSP Equilibrandoexperimentoseentregasnodesenvolvimentodeprodutos OperaeseInfraestrutura ControlandoasVersesdeseuBancodeDadoscomMigrations SubmissesparaShortTalks&7motivosparaparticipardoQConSP FacebookfazMercurialsermaisrpidoqueoGit ArquiteturaCorporativa SubmissesparaShortTalks&7motivosparaparticipardoQConSP DesenvolvimentodeviewsparaaplicativosAndroid QConSoPaulo:100%detutoriaisdefinidos,43palestrase58palestrantes Incio Todosostpicos ConfernciasQCon Criarconta Login QConsMundiais SoPaulo,Apr911,2014 London,March57,2014 NewYork,Jun913,2014 SanFrancisco,Nov3Nov7,2014 Parceiros

NewsletterdoInfoQBrasil
Assinenossanewslettersemanalparaacompanharonovocontedopublicadonositeeoutrosdestaques

Seuemailaqui

Assinar

SeuRSSpersonalizado Paraatualizaesdiriaseoutrasnovidades Paraatualizaesfrequentesenotciasdacomunidade Configureseusprincipaisinteresses

Desenvolvimento

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

9/10

26/03/14

No se repita? DRY e o dilema entre cdigo duplicado e alto acoplamento

ArquiteturaeDesign ProcessosePrticas OperaeseInfraestrutura ArquiteturaCorporativa

Feedbackgeral feedback br@infoq.com BT

Bugs Publicidade bugs publicidade br@infoq.com br@infoq.com

Editorial InfoQBrasiletodooseucontedo:todososdireitosreservados.2006 editor 2013C4MediaInc. br@infoq.com Polticadeprivacidade

www.infoq.com/br/news/2012/07/DRY-acoplamento-duplicacao

10/10

Anda mungkin juga menyukai