Вы находитесь на странице: 1из 5

GUJDiscusses:ltimostpicos|categorias|GUJRespostas

VejaosLivrosdaCasadoCdigo LivrosdeJava,SOA,Android,iPhone,RubyonRailsemuitomais

PadroDAOeMVC

rlanhellas Abr'12
Abr2012
Bom,estouhabituadoautilizaroPadroDAOemmeusprojetos,lisobreopadroMVCenoteiquenohmuitadiferenadopadro
DAO.VoufazerumaanalogiadopadroDAOcomoMVCepeoquemefalemseestivererrado. 1/25
Abr2012
ClassePOJO/DTOnoDAOCorrespondeaoModelnoMVC.
ClasseDAOtantonoMVCcomonopadroDAOcontinuasendoDAOmesmo
EnoMVCtemosainserodoControllerquecapturaosdadosdoView.

VamosaoexemploprticoemumcadastrodeClientes:

CamadaMODELouPOJO/DTO

publicClassModelCliente{
privateintcodigo
privateStringnome
publicintsetCodigo(intcodigo)...
publicintgetCodigo()...
publicStringsetNome(Stringnome)...
publicStringgetNome()...
Jan5
}

CamadaDAO

publicClassDaoCliente{
publicbooleaninserir..
publicbooleandeletar...
publicbooleaneditar...
...
}

CamadaCONTROLLER(APENASPRESENTENOMODELOMVC)

publicClassControllerCliente{
publicbooleanInserirCliente(){
mCliente=newModelCliente()
mCliente.setCodigo(1)
mCliente.setNome('Ronaldo')
daoCliente=newDaoCliente()
daoCliente.inserir(mCliente)
}
....
}

EfinalmenteacamadaVIEWquedependedeondevocestdesenvolvendo,Ex:
Delphi=FORM
JAVA=paginahtml,jsp..
PHP=paginaphp,html...
eporaevai.

Estcerto?

leulseixas Abr'12

AssimoDAOseriaacamadadeModeldoMVC(ModelViewController)

SetiverumtempodaumaolhadanaapostilaFJ21daCaelummuitoboae
arespeitodoMVCestamuitobemexplicado...

Semprerecomendoumaboaolhadanessaapostila
http://www.caelum.com.br/curso/fj21javaweb/

rlanhellas Abr'12

Certo,sabendoqueoDAO=MODEL,oControllerestcorretocomocoloqueiacima?

WRYEL Abr'12

rlanhellas:

Certo,sabendoqueoDAO=MODEL,oControllerestcorretocomocoloqueiacima?

Cara,noacesseseuDAOnacamadadeControllereaindamais,porumaclasseconcreta(useinterfaces),issogeraacoplamento
fortssimo.

Geralmenteumaboaarquiteturabsica,temnomnimoController(Classecontroladora)>Model(Regrasdenegocio(aquivocacessa
seuDAOparamanter/buscardados))>DAO.

WRYEL Abr'12

rlanhellas:

Certo,sabendoqueoDAO=MODEL,oControllerestcorretocomocoloqueiacima?

Cara,noacesseseuDAOnacamadadeControllereaindamais,porumaclasseconcreta(useinterfaces),issogeraacoplamento
fortssimo.

Geralmenteumaboaarquiteturabsica,temnomnimoController(Classecontroladora)>Model(Regrasdenegocio(aquivocacessa
seuDAOparamanter/buscardados))>DAO.

rlanhellas Abr'12

Comoficariausandointerfaces?

leulseixas Abr'12

EsseexemplodeDAOseriaumainterface

publicclassContato{}

publicinterfaceContatoDAO{
voidinserir(Contatocontato)
voidalterar(Contatocontato)
voidexluir(intid)
Contatobuscar(intid)
List<Contato>lista()
}

importjava.util.List

publicclassContatoMySqlDAOimplementsContatoDAO{

publicvoidinserir(Contatocontato){
//codigo

publicvoidalterar(Contatocontato){
//codigo
}

publicvoidexluir(intid){
//codigo
}

publicContatobuscar(intid){
//codigo
returnnull
}

publicList&ltContato&gtlista(){
//codigo
returnnull
}

AssimvcutilizasemprereferenciandoumContatoDAO,ganhonopolimorfismo

rlanhellas Abr'12

Certo,entendoousodeinterfacescomDAO,maisnovejoganhonisto,seioquepolimorfismomaisaindanoconsigoenxergarum
ganho.Poderiadarumexemplo?
romarcio Abr'12

Sumacoisa,noporquevocnomeiaumaclassecomoDAO(ContatoDAO,ClienteDAO,UserDAO),queelaumpadroDAO.ODAO
umpadroeparavocimplementaressepadrodeveseguirasespecificaesdopadro.

EaprimeiracoisaafazerumainterfaceDAOeimplementaressainterfacena(s)sua(s)classe(s)especifica(s)deDAO.Vocpodeter
umainterfaceDAOparacadaclasseconcreta,tipo:IUserDAO,UserDAO.OupodeterumanicainterfaceDAOqueimplementetodasas
demaisclassesespecificasouumclassegenricadeDAOqueserexpendidaemseusDAOsespecficos.

Certo,entendoousodeinterfacescomDAO,maisnovejoganhonisto,seioquepolimorfismomaisaindanoconsigoenxergar
umganho.Poderiadarumexemplo?

Senousar,noterumpadroDAO,terapenasumpacoteeumaclassechamadaDAO.

rlanhellas Abr'12

Entoeudevofazer:

IModeloDAO{
inserir
editar
deletar
buscarPorID
}

DaoClienteimplementsIModeloDAO{
inserir{...}
editar{...}
deletar{...}
buscarPorID{...}
}

leulseixas Abr'12

Esseexemplomeuficoutosco,
MaisvaleapenapensarqueutilizardeformamaisGenericaacabasendoumganho,principalmenteemmudanasdecenario.

OpadroDataAccessObject(DAO)simplificaredesacoplarainteraodasaplicaesJavacomabasedepersistencia.

Entooganhodousodeinterfaceodesacoplamento,numcenarioondeosurgimentodenovosBDouatrocadaBDnormaloupossa
acontecer,
terumsistemaondevctemumamudanasemterquemudarmuitootimo
MaisvcpoderiatersuaClasseDAOClientesemterumainterface,seriaseuDAO.
Pensesepodemudarbomsepreparar,deixarpreparadoparamudanas.

rlanhellas Abr'12

Poisleulseixas,comohaviaditoentendiofuncionamentopormaindanovinecessidadeemutilizarInterfaces.

romarcio Abr'12

rlanhellas:

Entoeudevofazer:

IModeloDAO{
inserir
editar
deletar
buscarPorID
}

DaoClienteimplementsIModeloDAO{
inserir{...}
editar{...}
deletar{...}
buscarPorID{...}
}

Seriaporessecaminhomesmo.
OuvocpodefazerumIDAO

IDAO{
inserir
editar
deletar
buscarPorID
}

EimplementaloemqualquerclassedeDAOespecifico,tepoupaumpoucodetrabalho.

Eaindapodefazerisso

IDAO{
inserir
editar
deletar
buscarPorID
}
abstractDAO<T>implementsIDAO{
//aquivoccriaaimplementaodosmtodosdainterface
}

EdepoisnasclassesespecificasvocestendeaclasseabstradaejteracessoaomtodosimplementadosemqualquerclassedeDAO
especificoqueestenderDAO.EnasclassesespecificasdeDAO,daivocpodecriarqualquermtododeCRUDquesejamaisespecifico
paracadaclasse.

LembrequesevocimplementaropadroMVCsemoController,elenoserumMVC.AmesmacoisavaleparaoDAO,seimplementar
seminterfaceelenoserumpadroDAOapenasvocterumaclassedepersistnciasendochamadadeDAO.

rlanhellas Abr'12

Medigaumacoisa,acamadaVIEWpodesecomunicarcomaMODEL?

romarcio Abr'12

rlanhellas:

Medigaumacoisa,acamadaVIEWpodesecomunicarcomaMODEL?

No,issoquemfazocontroller.Masporexemplo,seforumaappdesktop,vocpodeacabarprecisandoterumobjetodasuaentidade
naview,masselimitariaaisso,regrasdenegciosdevemseracessadaspelocontroller.

rlanhellas Abr'12

EntoqualquerregradenegciosersempreaplicadanacamadaCONTROLLER?

lordcarlos Abr'12

TodaaregradenegciovainacamadadoModel,nodoController.OControllerapenasrecebeasrequisiesdaViewedelegaparao
modeloprocessar.PorexemplosenasuaViewousurioclicarnobotodefinalizarpedido,seucontrollerpegaraporexemplooObjeto
carrinhodomodeloeirachamarummetodocomocarrinho.realizarPedido()eaidentroestarasuasregras.

QuantoausarinterfaceparaDaointeressanteparatestesunitriosondevocnormalmenteprecisaramockarelas.