Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
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<Contato>lista(){
//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.