Você está na página 1de 7

UmManifesto!

Programao,web,bancodedadosemuitodesenvolvimento.

Camadadepersistnciadedados:DAOeActiveRecord
Publicadoem12dedezembrode2008por Finalmenteacamadadedados Acamada,oulayer,depersistnciaoudeacessoaosdadosapartedaaplicaoresponsvelporsecomunicarcomobancodedados,oucomoframeworkde persistncia,sendoosdoispadresmaisconhecidosoDAOeoActiveRecord.

Numaaplicaoorientadaaobjetos,ebemmodeladaemodular,temosaboaseparaoentreasresponsabilidadesdecadapartedaaplicao.Apartedeacessoao bancodedadosumadasmaisinteressantes(aminhacamadafavorita!),elaresponsvelporseconectaraobancodedadoseextrair,inserireatualizaras informaes.responsveltambmportransformarmodelosdeObjetosemmodelosRelacionais,otaldoORM(MapeamentoObjetoRelacional),jqueemmuitoscasos lidamoscombancodedadosrelacionais.

Podemosacessardeduasformasobancodedados,usandoumframeworkouescrevendoSQLprprio.Hojeemdiaexisteumavariedadedeframeworks,que programamosvriosrecursosnecessrios,demodoquecostumaserperdadetempofazeroacessodiretoaoBancodeDados.GeralmenteoORMfeitoatravs dessesframeworks. TemosdoispadrescomunsparaacomunicaocomoBD/Framework:oDataAccessObjet(DAO)eoActiveRecord(AR).Poderamosacrescentartambmopadro Repositrio,masesteterumartigoprprio,naevoluodestetema.Osdois,DAOeAR,sopadresbemdistintoserefletemabordagensextremamentediferentesna modelagemdaaplicao. OActiveRecordsetornouextremamentepopularcomoframeworkRails,paraalinguagemRuby,comoaprodutividadeesimplicidadedoframeworkrevolucionao desenvolvimentomuitosabraaramopadrotambmemoutrosframeworks.Opadromuitocomumemframeworksparalinguagensdinmica,sendoatdifcilachar umquenoouse(nemtanto).

AmodelagememActiveRecord"invade"acamadadoModelo/Domniodaaplicao,definindoqueumObjetodomodelooreflexodeuma"linha"dobancodedados. Assimsendo,osobjetosquesopersistentesdevemestender/especializarumaclasseouinterfacequesejaequivalenteaumalinhadobancodedados.OModelouma ExtensodoBancodeDados. Essainterface,queomodeloouclassegenricaprograma,defineosmtodosdeinteraocomobancodedadosqueummodelopossui.Entooprpriomodelo responsvelpelasuapersistncia.OprprioobjetoimplementamtodoscomoSalvar,Restaura,Filtrareetc.Almdasfunesde"Join".DestaformaoActiveRecord temumaabordagemsimples,vistodeoutrascamadasumaformalgicaefcildesetrabalhar.. Nosframeworks,temosumaclasseabstrataquecapazdedecidircomomontarasqueriesSQLdeacordocomaspropriedadesdoobjetoqueaestender.Dessemodo costumabastarestenderenohnecessidadedealteraromodelo,nomximoacrescentandoinformaesoumetadadossobreatabelaequivalente,deacordocoma

abordagemdoframework. OproblemacomoActiveRecordqueseumodeloficacommuitaresponsabilidade,ActiverRedordnoEscala!,ecria"BFC"s(BigFuckingClasses),jqueomodelo almdeconterasregrasdenegciotambmcuidadobancodedados.EssaabordagemdoActiveRecordmuitasvezesconsideradaumafalhanodesigndaaplicao, pelofatodequeoDomniopassaasersubordinadodoBancodedados.Esteargumentopodeserrebatidojquenamaioriadossistemas,asclassesdoModeloso apenasrepresentaesdoDomnio,enoprogramamregrasemsi,equeessasregraspassamestarrepresentadasnapersistncia,noafetandoodesigndemuitas aplicaes. Naprtica,setemosumaclasseUsurioestadeveestenderumaoutraclasse,digamosRecord.Recordumaclasseprovidapeloframeworkdepersistncia,ela implementaosmtodosSelect,SaveeDelete.ElatambmexigequesejaimplementadoummtodoConfigurepelaclassefilha,paradefinirosparmetrosdobancode dados.Assimsemprequeprecisamosbuscarumusuriodobancodedados,usamosomtodoSelectdaprpriaclasseUsurio,eporaivai. SeporumladooActiveRecordatuadeformasimpleseexplorandoaflexibilidadedosframeworksdepersistnciadehojeedinamismodaslinguagens,oDAOporsua vezsurgenumambientedeframeworkmaisrgidosequedemandavammaiornumerodechamadaseconfiguraes.ODAOpraticamenteoopostodoActiveRecord, emdesign. AsclassesDAOrepresentamumacamadaprpria,eformamumpacotedeacessodedados,algumasvezessobopacotedomodelo,algumasvezesumpacote independenteeoutrasvezespartedopacotedecontroladores.OmaiscomummesmoqueopacotedeDAOfiquesubordinadoaoModelo,massemestendlo.Assim temosumaseparaoerelativaindependnciadacamadadeacessodadosedoDomnio.

OprincipioqueparacadaModelo,temosumDAOcorrespondente.TodainteraoeconfiguraocomoBancodedados,oucomoframeworkdepersistncia,ficamna camadadosDAO.EntooDAOpassaaprogramarmtodoscomoSelect,Delete,Insert,Updateeoutrosquevenhamasernecessrio.Podemprogramarmtodosmais especficos,comoselecionarOndeNomeComecaComLetraoucadastrarLista. ODAOpodeserusadotambmcomocamadaentreaaplicaoeomodelo,ouentrediferentesaplicaes.Passaseanoacessaromodelodiretamente(comnew)e usarosmtodosdoDAOparatal,masessaabordagemnemsempreusada.Assim,semprequequiserumainstnciadeumModelo,usaseoDAO. OusodeDAOs(oueraaomenos)bemmaiscomumnosprojetosJava.Comomuitosframeworksaindaerammuitorgidos,eprecisavamdemaiscdigoparafazero ORM,ouparaescreverqueriesmaispersonalizadas,essecdigopassouaresidirnacamadadoDAO,algumasvezestantoadescriodatransformaoORMquantoa montagemdasqueriesatravsdosmtodosdoframework.Ouento,emcasosondeasqueriesdeviamsermuitoprecisas,ainteraodiretacomoBancodedados. AabordagemdeDAOcostuma(va)serassociadaaumdesignmaiselegante,devidoseparaodascamadas.Assimtnhamosmaisflexibilidadeaomanipularo framework.Pormcomaevoluodosframeworks,estespassamaperderumpoucoautilidade,jquesonecessriaspoucaschamadasaosframeworkeestes conseguemcriarqueriescadavezmaiscomplexasautomaticamente. ODAOentraem"crise"comaevoluodosFramework,esuautilidadepassouaserquestionada,poismuitasvezespassaramsimplesmenteaprogramarosmesmos mtodosqueoframeworkprovia,apenasrepassandooschamados.Ficandoentreumcasodeprogramlosporpurodesignepassandoaseroverengineering.Como conhecimentodopadrodeRepositriosessescasopassouaserentendidodeoutraforma.. Naprtica,setemosummodeloUsurio,teremosumDAOUsurioDAO.AclasseUsurionosealtera,masimplementamosnaUsurioDAOosmtodosnecessrios, comoselect,saveedelete.OsmtodosdeUsurioDAOfazemasvalidaesnecessriasemontamaschamadasparaoframeworkdeacordocomasespecificaesdo Usurio,repassandoentooobjetoaoframework.PodeaindaimplementarmtodosespecificoscomovalidaLogin.Entoaoprecisarcriar,recuperarousalvarumobjeto usaseoDAOdeste. Apesardeterescritobastante,estaabordagemaindasuperficial.Apresenteiosprincipaisconceitosdestespadres,paraexemplosprticosbastaprocurarframeworks parasualinguagem.ParaoActiveRecordexistemvriasopes,masnaverdadenoexistemframeworkparaDAO,jqueDAOpodeserusadoemconjuntocomoutras abordagemdepersistncia. Umoutroimportantepontonacamadadepersistnciaeacessoaosdados,opadroRepositrio(repository),quesolucionoualgunsproblemasdosDAOeseadapta melhoraestesframeworksmaisflexveisemenoscomplexos,masesteficaparaumprximotexto. PublicadoemProgramaopor.MarqueLinkPermanente[http://manifesto.blog.br/2.0/Programacao/daoactiverecord].
10IDEIASSOBRECAMADADEPERSISTNCIADEDADOS:DAOEACTIVERECORD

Diogo em18demaiode2011s3:34disse:

TambmachooARmaisprticoesimplesemaplicaesdinmicas,masemmodelosmaiscomplexos prefirotrabalharcomrepositriosparatermaiorseparaoderesponsabilidadesnomodelo.

Marianna em6dedezembrode2009s0:40disse:

Excelenteexplanaosobreostemas!Estoufazendoumtrabalhosobrepersitnciadedadoseoseupost ajudoumuito!Valeu!

DiogoSouza em6dedezembrode2009s1:35disse:

Quebomquefoitil,esperoqueanotadotrabalhosejaboa:)

RenatoMedina em17demaiode2011s11:21disse:

JutilizohalgunsmesesZendFrameworkeDoctrineevejoqueoActiveRecordumgrandefacilitadordo trabalhodepersistnciaetambmsimplesdecompreenoemanipulao.QuantoaoDAOnotenho refernciassuficintes,masacreditoqueARsejadefatoaemelhoropoparalinguagenscomooPHP.

Parabnspelopost.

ChrisBenseler em30dedezembrode2008s14:00disse:

Comoprogramadordeinterface/frontendquesou,essaexatamenteacamadadaqualeufujo!hehe Mass,belopost!

DiogoSouzadaSilva em1dejaneirode2009s23:32disse:

hehehepoisChris,jeu,comodeveimaginarnotenhomuitapacinciaparaescrevertelas:)

MarleneLima em22deabrilde2009s1:34disse:

Interessanteoqueescreveu!!! Ajudouatirarumasdvidas!!!

DiogoSouzadaSilva em22deabrilde2009s12:47disse:

Oba,quebomquelhefoitil!

FredericoMottinhadeFigueire em23dejunhode2009s23:35disse:

Muitoboamatria,atualmenteutilizoDAOemmeusprojetos.MastenhoestudadoopadroActiveRecord comoZendFramework. FiconoaguardodoseuartigosobreopadroRepository.

DiogoSouza em24dejunhode2009s21:46disse:

OlFrederico,quebomquevocmelembrou,acabeidepublicaroartigosobrerepositrios. http://manifesto.blog.br/1.5/Blog/Programao/repositorypattern.html Esperoquesejatil.