Você está na página 1de 9

Home

28
mai

Agile

Artigos

Exemplos

Ferramentas

Programao

Sobre o Autor

Arquitetura MVC no Delphi

Pesquisar

Postado por Andr Luis Celestino


2013 Publicado em Artigos, Delphi, Desenvolvimento, Engenharia, Programao

Sobre o autor
Nada melhor do que desenvolver um sistema utilizando uma boa
arquitetura de software, no ? Uma das arquiteturas mais utilizadas por
empresas e desenvolvedores de software o MVC (Model-View-Controller),
padro que fornece organizao, padronizao e facilidade de manuteno
do cdigo. Esse artigo aborda os passos bsicos para a elaborao de um
projeto arquitetado em MVC no Delphi. Confira!

O objetivo principal deste artigo mostrar a hierarquia de pastas em um projeto, a alocao das
units dentro dessas pastas e a forma como elas se comunicam entre as camadas. Portanto, vou
considerar que voc j tem conhecimento dessa arquitetura, noes bsicas de Orientao a

Andr Luis Celestino


Analista Implementador Delphi,
entusiasta em Desenvolvimento
gil, graduado em Sistemas de
Informao e ps-graduado em
Engenharia e Arquitetura de
Software.

Objetos e experincia com Delphi, ok? Mesmo assim, se voc quiser conhecer os conceitos do MVC,
leia tambm este artigo.
Vamos l! O primeiro passo criar a pasta raiz do projeto, como C:\Aplicativo, por exemplo. Em
seguida, criaremos tambm mais trs pastas dentro dela: Model, View e Controller. Essa ser a
estrutura de subpastas que armazenar nossas units referentes a cada camada. A partir de ento,
as units criadas devero ser salvas de acordo com a sua responsabilidade no projeto:
As units das classes de modelagem devero ser salvas dentro da subpasta Model
J as units de controle devero ser salvas dentro da subpasta Controller
Por fim, os formulrios devero ser salvos dentro da subpasta View
O arquivo de projeto (DPR ou DPROJ) dever ser salvo fora dessas subpastas, ou seja, no
diretrio raiz da aplicao
Demais arquivos (imagens, arquivos texto, arquivos INI) opcionalmente podem ser salvos
em um diretrio prprio, como Arquivos

Categorias
Agile
Ambiente Profissional
Artigos
Clean Code
Delphi
Desenvolvimento
Dicas
Discusses

A nomenclatura das units tambm importante para facilitar a


localizao dentro do projeto. Uma boa prtica salv-las com um
prefixo representando o nome da camada seguido do nome de
domnio. Por exemplo, se houver o domnio Cliente, poderamos
nomear as units da seguinte forma: classeCliente, controleCliente e
frmCadastroClientes. Este ltimo recebe o prefixo frm por se tratar de um formulrio na camada
View, embora este prefixo tambm possa ser utilizado como form, f_ ou at mesmo visao.

Engenharia
Internet
Mercado
Off-Topic
Pesquisas
Programao
Tecnologia da Informao

Alguns desenvolvedores preferem utilizar nomenclaturas em ingls nas units, nomeando-as como
classCliente e controllerCliente. Na verdade, o padro de nomenclatura relativo de cada
desenvolvedor, mas o importante definir um nome que seja condizente com a camada na qual a
unit est alocada.

Blogroll
Histrico de artigos

Ao respeitar essa estrutura de pastas, observe que o Delphi organiza automaticamente a

SubRotina no Facebook

disposio das units dentro de suas respectivas pastas no Project Manager:

SubRotina RSS Feed


SubRotina Gesto Verde
Ricardo Boaro Embarcadero MVP
Blog do Diego Garcia
Profissionais TI

Twitter!
Tweets

Follow

Profissionais TI
@profissionaisti

Estrutura de pastas exibida no Project Manager do Delphi

A comunicao entre as camadas realizada por meio da instanciao de objetos das classes.
Considerando que temos um domnio de negcio no projeto chamado Cliente, poderamos
escrever o bloco de cdigo abaixo para salvar um novo cliente no banco de dados:

30 Dec

Pra quem perdeu a


#RetroPTI2014, veja tudo que
rolou em bit.ly/1AcayfV. Boa
leitura! :
Retweeted by Andr
Celestino
Expand
Andr Celestino
@acelestino86

22 Dec

#SubRotina Compilao de
Tweet to @acelestino86

var
//variveisdascamadasutilizadasnarotina
objetoCliente:TCliente;

Gesto Verde

objetoControle:TControleCliente;
begin
//instanciaodosobjetos
objetoCliente:=TCliente.Create;//classeModelo
objetoControle:=TControleCliente.Create;//classeControle
try
//preenchimentodosdados
objetoCliente.Codigo:=StrToIntDef(edtCodigo.Text,0);
objetoCliente.Nome:=Trim(edtNome.Text);
objetoCliente.CPF:=edtCPF.Text;

Pague-me um caf!

//chamadadarotinaparagravao
objetoControle.Salvar(objetoCliente);
finally
//liberaodosobjetosdamemria
FreeAndNil(objetoCliente);
FreeAndNil(objetoControle);
end;
end;
Atente-se que, ao chamar o mtodo Salvar de objControle, os dados do objetoCliente ainda no
sero efetivamente gravados no banco de dados. Antes disso, eles passam pela camada Controller,

INFO Online Notcias


Xiaomi vendeu 61 mi de aparelhos
em 2014 e planeja expanso
Netflix bloqueia usurios que
burlam restrio geogrfica
Indonsia encontra quinta possvel
parte do avio da AirAsia

responsvel por validar os dados do objeto para evitar que eles sejam transferidos para a camada
de acesso a dados (Model) com inconsistncias.
Observe que no exemplo acima, um dos atributos da classe Cliente o CPF. Podemos escrever
uma funo na camada Controller para validar o CPF e, em caso de invlido, abortar a operao de
gravao e retornar uma mensagem ao usurio. Essa uma grande vantagem da arquitetura MVC:
durante essa operao de validao no h nenhum acesso camada de acesso a dados. Na
prtica, como se a camada de acesso a dados (Model) ainda no soubesse que o usurio est
incluindo um novo cliente. Ela s ir receber o objeto quando estiver validado e consistente.
Interessante, no ?

A camada Controle, por sua vez, ter o seguinte cdigo no mtodo Salvar:
procedureTControleCliente.Salvar(constobjetoCliente:TCliente);
begin
//aquidevemserescritasasfunesdevalidao

objetoCliente.Salvar(objetoCliente);
end;

Veja que utilizamos o prprio objeto passado por parmetro para


chamar a funo Salvar da camada Model. Aproveitando a
oportunidade, vale ressaltar uma observao importante: muitos
desenvolvedores preferem estender a camada Model na arquitetura
MVC e criar uma camada exclusiva de acesso a dados, chamada DAO
(Data Access Object). Eu confesso que sou um desses desenvolvedores,
rsrs.
Ao criar a camada DAO, possvel separar a modelagem de dados (atributos da classe) e os

Coreia do Norte diz que sanes


dos EUA so polticas hostis
Gelo pode ter provocado queda do
avio da AirAsia, diz agncia
meteorolgica

mtodos de acesso a dados (Salvar, Alterar, Excluir, etc) em units diferentes. Lgico, neste caso,
necessrio criar mais uma subpasta no diretrio da aplicao chamada DAO. A introduo dessa
camada tambm ir interferir na camada Controller. Por exemplo, utilizando o cdigo anterior
como comparao, a chamada do mtodo Salvar alterada para a seguinte forma:
procedureTControleCliente.Salvar(constobjetoCliente:TCliente);
var
objetoDAO:TDAOCliente;
begin
objetoDAO:=TDAOCliente.Create;
try
//aquidevemserescritasasfunesdevalidao

objetoDAO.Salvar(objetoCliente);
finally
FreeAndNil(objetoDAO);
end;
end;

Embora o cdigo fique ligeiramente maior, a compreenso no fica comprometida. A diferena


que, ao invs de chamar a camada Model para persistir os dados, chamamos a camada DAO.
Antes de finalizar o artigo, gostaria de esclarecer uma dvida comum de desenvolvedores que
comeam a trabalhar com Orientao a Objetos no Delphi, principalmente desenvolvedores que
vieram de outras linguagens, como C++, C# e Java. Essa dvida relacionada aos getters e setters,
que so mtodos de leitura e escrita dos atributos de uma classe.
No Delphi no necessrio utilizar getters e setters. A ferramenta introduz um modo diferente de
manipular os atributos: atravs de propriedades (property). Em apenas uma linha, possvel
declarar a propriedade e suas variveis de leitura e escrita, como o exemplo abaixo:
type
TCliente=class
private
FNome:string;
public
propertyNome:stringreadFNomewriteFNome;
end;

Ou ento, caso necessrio, declarar mtodos para leitura e escrita:


type
TCliente=class
private
FNome:string;

procedureSetNome(Valor:string);
functionGetNome:string;
public
propertyNome:stringreadGetNomewriteSetNome;
end;

Legal, no ?
O exemplo contido neste artigo (com alguns incrementos) pode ser baixado neste link.
Pessoal, eu vou ficando por aqui e agradeo a vocs pela visita no SubRotina!
Qualquer dvida ou dificuldade no desenvolvimento de um projeto em MVC, entre em contato!
Abraos!

Tags: Arquitetura, Delphi, Engenharia de Software, Orientao a Objetos, Programao

Artigos relacionados

SubRotina FAQ 7 (22 de dezembro de 2014)


O futuro a personalizao (15 de dezembro de 2014)
A relevncia da expressividade no cdigo Parte 3 (08 de dezembro de 2014)
A relevncia da expressividade no cdigo Parte 2 (24 de novembro de 2014)
A relevncia da expressividade no cdigo Parte 1 (17 de novembro de 2014)

44 usurios comentaram essa postagem


Frank comentou em 13/06/2013 s 05:46
Primeira vez que vejo ensinamentos de Delphi Orientado a Objetos.
Parabens!
Espero outros artigos sobres.
Andr Luis Celestino comentou em 13/06/2013 s 07:54
Obrigado, Frank. Provavelmente haver mais artigos sobre Orientao a
Objetos!
Genilson Soares comentou em 21/06/2013 s 22:46
Muita boa sua explicao Sou desenvolvedor mas nunca usei o
modelo MVC e confesso que tenho dificuldades para tal. Mas vou
procurar colocar seus ensinamentos em prtica
Se possvel faz um cadastro bsico em firebird e com a camada de
persistncia (DAO).
Parabns por compartilhar seu conhecimento. Que Deus te abenoe.
Andr Luis Celestino comentou em 26/06/2013 s 19:21
Ol, Genilson. Assim que possvel, vou desenvolver uma aplicao em
MVC com Firebird e postar aqui no SubRotina. Obrigado pelo
comentrio.
jorge comentou em 21/07/2013 s 12:39
otimo trabalho
esta sendo de muita valia, value.
caro amigo,
como ficaria usando datasnap 2010
tem algum exemplo.
obrigado.
Andr Luis Celestino comentou em 21/07/2013 s 16:10
Ol, Jorge! Obrigado por deixar o comentrio. Ainda no tive a
oportunidade de fazer o teste da arquitetura utilizando DataSnap. Assim
que surgir a oportunidade, sem dvidas vou postar um exemplo.
Roberto Carlos comentou em 23/07/2013 s 17:07
Parabns pela iniciativa!
Muitos sites recomendam programao orientada a objetos para
Delphi, mas ningum mostra como fazer. Obrigado por nos ensinar
como fazer.
Aguardo ansiosamente para aprender contigo como fazer uma pequena
aplicao completa em Delphi Firebird, MVC e DAO.
Alis, voc poderia explicar num outro artigo vantagens e desvantagens
em usar programao dataware, MVC, MVP e MGM.
Andr Luis Celestino comentou em 23/07/2013 s 18:37
Ol, Roberto! Muito obrigado pelo comentrio. Em breve pretendo dar
continuidade nos artigos sobre implementao de padres de
arquitetura e tambm de Design Patterns. Provavelmente o MVP
tambm vai entrar na pauta!
Leonardo Rehder comentou em 02/08/2013 s 01:21
Parabns est bem didtico o seu artigo!
Andr Luis Celestino comentou em 02/08/2013 s 07:31
Obrigado por deixar o comentrio, Leonardo!

Jonathan Lazaro comentou em 10/08/2013 s 11:19


Bom dia, Andr!
Primeiramente queria agradecer pela excelncia de seus artigos: tenho
aprendido muito aqui e espero aprender ainda mais!
Sobre o MVC, eu tenho lido bastante sobre o assunto e aos poucos vou
assimilando os conceitos. Mas uma dificuldade que eu tenho, que pelo
jeito a mesma do colega Genilson Soares, de que forma exatamente
deve ser implementada a persistncia dos dados
Na verdade eu at tenho algumas ideias, como criar um DataModule e
colocar os objetos (queries, etc) referentes s minhas classes l. Mas fico
com a impresso de que isso violaria a ideia bsica do MVC, ou de que
talvez acabe colocando um pouco de programao estruturada onde
no era para te-la Ou mesmo que, apesar de funcionar, no seja o
melhor mtodo! Mas o que seria o ideal? Criar os componentes de
acesso aos dados em tempo de execuo, por exemplo?
Quero ressaltar que no estou querendo que voc entregue tudo de
bandeja: pesquisei muita coisa a respeito de MVC e os artigos que
encontrei param justamente na parte da persistncia, o que me deixou
cheio de dvidas. Como seu exemplo foi de longe o mais didtico que
achei, se voc puder esclarecer esse ponto pra mim e pros outros
colegas tenho certeza que ficaria ainda melhor! Ou mesmo seguir a
sugesto do Genilson e mostrar um exemplo na prtica, isso claro, se
seu tempo permitir
Independente da resposta, obrigado novamente por seu blog! O
conhecimento agradece!
Andr Luis Celestino comentou em 10/08/2013 s 14:17
Ol Jonathan! Em primeiro lugar, agradeo muito por ter deixado o
comentrio. Voc foi claro, objetivo e explicou muito bem o ponto de
vista e a dvida. Realmente, a camada de persistncia, ou simplesmente
DAO, o que confunde os desenvolvedores na arquitetura MVC. Apesar
do conceito tradicional do MVC implicar que a DAO est implcita dentro
da camada Model, muitos preferem desmembrar a modelagem e a
persistncia em camadas diferentes. Vou lhe enviar um e-mail com mais
detalhes. Obrigado!
Jonathan Lazaro comentou em 10/08/2013 s 15:37
Andr, me faltam palavras para dizer o quanto sou grato por tanta
prestatividade! Espero que este artigo, bem como os outros e suas dicas
sirvam para mostrar pra muita gente que OO no Delphi muito mais
simples do que parece! Obrigado de novo e bom fim de semana!
Prohulk comentou em 13/09/2013 s 09:21
Ol Celestino, A.L.
Parabenizo-o pela prestatividade (j comentada) e excelncia tcnica de
seus artigos. Estarei acompanhando-o em futuras publicaes e gostaria
que, se possvel, expressasse sua opinio sobre a persistncia de dados
com o BDOO CACH da Inter System, que suporta uma grande
variedade de linguagens e diferentes protocolos.
Andr Luis Celestino comentou em 13/09/2013 s 09:43
Ol, Prohulk. Obrigado pela visita e pela sugesto de comentar sobre o
BDOO CACHE. Assim que possvel, pretendo elaborar um novo artigo
sobre o assunto. Abrao!
Roberto Carlos comentou em 23/09/2013 s 04:21
Obrigado pelo email. Estou estudando o exemplo em Delphi + MVC +
DAO que voc enviou.
possvel usar DBGrid com MVC respeitando a POO ou devemos usar
StringGrid?
Por causa da POO, os componentes dataware tendem a desaparecer?
POO e RAD (dataware) so inimigos mortais?
Andr Luis Celestino comentou em 23/09/2013 s 22:08
Ol, Roberto! Fico contente que o exemplo esteja lhe ajudando! Roberto,
nada impede que o desenvolvedor utilize uma DBGrid com POO, j que
possvel popular um TClientDataSet com dados OleVariant e lig-lo a
uma DBGrid sem problemas. Por exemplo, no MVC, voc pode criar uma
funo que retorne um OleVariant para um TClientDataSet criado na
memria (em tempo de execuo), e exibir os dados na DBGrid. Em
suma, eu no diria que POO e DataWare so inimigos, mas a POO
definitivamente reduz a utilizao de componentes DataWare e abre
espao para a criao e manipulao de objetos em runtime.
Roberto Carlos comentou em 24/09/2013 s 00:04
Quando voc puder, por favor, faa um artigo ensinando Por exemplo,

no MVC, voc pode criar uma funo que retorne um OleVariant para
um ClientDataSet criado na memria (em tempo de execuo), e exibir
os dados na DBGrid.
Isso ajudaria um monte de gente, como eu, que anda perdida ao entrar
nesse mundo POO do Delphi
Por causa dos dbgrids, estou usando dois datasets em cada
datamodule: um dataset/datasource para o dbgrid e outro para os
objetos da OOP.
O form funciona, mas ainda est confuso de fazer manuteno depois
No sei se o fato da empresa ainda usar Delphi 7 tambm seja mais um
complicador ao migrar para POO tudo que antes estava em dataware.
Antes de abandonar o Delphi 7, tenho que jogar fora vrios
componentes de terceiro que no existem mais para as novas verses
do Delphi.
Obrigado novamente pela ajuda e pacincia.
Roberto Carlos comentou em 24/09/2013 s 13:31
A coisa fica ainda pior quando me pedem um dbgrid editvel
Andr Luis Celestino comentou em 24/09/2013 s 18:15
Ol, Roberto! Na verdade, a verso 7 do Delphi no dificulta o trabalho
com POO, ao menos que voc tenha que utilizar tecnologias exclusivas
das verses mais recentes. Roberto, em breve vou lhe enviar um
exemplo sobre como carregar um TClientDataSet com dados OleVariant.
bem simples! Obrigado novamente pelo comentrio!
Anderson comentou em 18/11/2013 s 11:59
Ol Andr, gostei do seu post mas observei que voce faz a validao dos
dados (regra de negocio) no proprio controlador nao seria uma boa
pratica criar um camada de negocio pra fazer a validaes dentro do
controlador e usa-lo apenas para direcionar as requisies?
Andr Luis Celestino comentou em 19/11/2013 s 21:54
Boa observao, Anderson! Essa questo gera muita controvrsia. No
exemplo que desenvolvi, decidi colocar as regras de negcio no
Controller, manter o Model exclusivamente para as classes de
modelagem e a camada DAO para persistncia com o objetivo de
demonstrar a separao de responsabilidades. Porm, muitos
desenvolvedores empregam uma estrutura mais gerenciada: o Model
agrega tanto as classes de modelagem quanto as regras de negcio,
enquanto o Controller somente faz o papel de interface entre a View e o
Model.
Na empresa em que trabalho, optamos por utilizar o MVP (Model-ViewPresenter) nessa estrutura que voc mencionou, e bastante funcional.
Toda a regra de negcio concentrada na camada Model, dispensando
o Presenter dessa responsabilidade. Os resultados at o momento foram
positivos.
Obrigado pelo comentrio!
getulio torres comentou em 27/11/2013 s 14:34
Ola caro Andr, muito bom seu arquivo, espero outros posts, voc
deveria tambm esta postando sobre banco de dados interbase sera de
grande proveito para muitosgrande abrao.
Roberto Carlos comentou em 27/11/2013 s 15:38
Voc poderia fazer um artigo demonstrando o MVP (Model-ViewPresenter)?
Tem muita diferena entre MVC, MVP, MVvM (Model-View-view-Model) e
MGM (Model-GUI-Mediator)?
Roberto Carlos comentou em 27/11/2013 s 15:41
Quais as principais vantagens e desvantagens entre programar com
DAO (Data Access Object) e ORM (Object Relational Mapping)?
Andr Luis Celestino comentou em 27/11/2013 s 16:43
Ol, Getulio! Nos exemplos de blog eu uso bastante o Firebird, que
basicamente uma verso Free do Interbase. Portanto, os exemplos
podem ser replicados no Interbase sem problema algum.
Abrao!
Andr Luis Celestino comentou em 27/11/2013 s 16:52
Ol, Roberto! Sim, h algumas diferenas entre esses padres de

arquitetura, principalmente relacionados s responsabilidades de cada


camada, comportamentos dos objetos e a forma como as interaes
so implementadas. Embora tenham objetivos em comum, os padres
se diferem na forma como so manipulados.
Roberto, o tempo bastante curto, mas a minha inteno iniciar uma
fase de elaborao de artigos tcnicos voltados para Engenharia de
Software, como, por exemplo, demonstrar o MVP assim como foi feito
com o MVC.
Obrigado pela sugesto!
Andr Luis Celestino comentou em 27/11/2013 s 17:06
Ol, Roberto. tima pergunta.
Tanto DAO quanto ORM so camadas de persistncia, mas o ORM tira
mais proveito da Programao Orientada a Objetos. O objetivo do ORM
evitar que haja um retrabalho ao criar a modelagem das tabelas banco
de dados e a modelagem das classes que representam essas tabelas.
Em outras palavras, o ORM permite que, por exemplo, a aplicao leia a
estrutura de uma tabela e gere uma classe que a represente (em que os
campos da tabela so convertidos em atributos da classe).
A camada DAO geralmente no fornece recursos dessa natureza, mas
til para assumir como intermediria entre a aplicao e o banco de
dados, ou seja, receber os dados, valid-los, gerar instrues SQL e
garantir a persistncias dos dados atravs de transaes.
Fabio Rubim comentou em 23/04/2014 s 14:37
Ol Andr.
Achei excelente esta sua demonstrao de MVC com Delphi, difcil
encontrar algo na web utilizando Delphi, parabns.
Mas me surgiram algumas dvidas em um projeto que eu comecei a
desenvolver.
Comecei a desenvolver usando o padro MVC, criando as classes e etc,
mas percebi que toda a facilidade que os componentes dataware e o
clientdataset so perdidas, principalmente na questo de validaes.
Eu vi que eu colocava por exemplo um TEdit e tinha que tratar se for
nmero inteiro, string, real e etc, depois faria todo o processo como
voc descreveu, mas eu percebi que a camada MODEL poderia ser
retirada e deixar isto para o ClientDataSet. Eu fiz na view todos os tipos
de validaes que eu precisava para os campos dos dataware, no form
(a minha view) eu coloco um clientdataset que eu preencho na
memria, depois eu gravo o cds em memria com um post e eu passo
ele para uma camada de controle(singletone) que encarregada de
fazer as regras de negcio e de chamar as funes para salvar no banco
de dados.
O que acha disto? O M do MVC virou o cds, correto? Continua sendo
MVC?
Abraos!
Andr Luis Celestino comentou em 23/04/2014 s 22:37
Ol, Fbio!
Ao meu ver, voc estendeu o padro MVC e criou uma arquitetura
personalizada. Isso natural, principalmente quando lidamos com
regras de negcio e particularidades de um projeto em especfico. Bem,
se voc est gerenciando a modelagem dos seus dados com o
TClientDataSet, ento podemos afirmar que ele assume a
responsabilidade da camada Model. Claro, o TClientDataSet no tem a
mesma eficincia que a Orientao a Objetos, j que, com classes,
podemos trabalhar com Getters e Setters, heranas, encapsulamento e
visibilidade. Porm, utilizar um TClientDataSet para essa finalidade no
foge totalmente das diretrizes do MVC.
A propsito, notei que voc utiliza Design Patterns no projeto, como o
Singleton! Isso importante!
Obrigado pelo comentrio!
Abrao!
Fabio Rubim comentou em 25/04/2014 s 13:58
Obrigado pela resposta Andr.
Sim, ainda conheo pouco sobre Design Patterns, mas aos poucos quero
me aprofunda, e utilizando Delphi. Eu acho o Delphi uma das melhores
ferramentas para se desenvolver software, mas acho uma pena faltar
mais material sobre ele, ainda mais relacionado a desenvolvimento OO,
Design Patterns e etc.
Abraos.
Andr Luis Celestino comentou em 25/04/2014 s 19:45
Concordo com voc, Fbio! Infelizmente no fcil encontrar bons
materiais sobre programao orientada a objetos com Delphi. Alguns
desenvolvedores normalmente recorrem materiais em outras
linguagens e reproduzem o aprendizado no Delphi. Apesar de um pouco
trabalhoso, uma boa alternativa!
Obrigado novamente pelo comentrio! Abrao!
Paulo comentou em 06/08/2014 s 09:26

Bom dia.
Preciso de uma ajuda com MVC.
Veja se pode ajudar.
Criei uma Interface cliente.
Contendo todos os campos da tabela cliente.
por exemplo
iCliente
snome
srua
sbairro
slocalidade
snumero
etc
Fao o sql e jogos todos os dados para
um
Tlist(icliente)
At aqui tudo ok.
funcionando sem problema.
a Minha duvida a seguinte
Qd vou montar me grid.
tenho todos os campos no Tlist(iclient).
S que nao quero mostar todos no grid.
S que tambem nao quero que seja fixo.
Gostaria de fazer alguma coisa assim como fao hoje usando a query.
for i:=0 to query.fields.count
meugrid.coluna := query.fieldbyname(campo).assgtring;
ou seja so os campos que trago na query e que mostro no grid.
asuando a interface trago todos os campos do banco e jogo na
interface..
ai teria que ficar fazendo um if ou deixar fixo.. nao consegui pensar em
algum para ser dinamico isso.
pode ajudar.
obrigado.
Andr Luis Celestino comentou em 06/08/2014 s 19:13
Ol, Paulo. Infelizmente no consegui compreender muito bem a sua
dvida. Vou entrar em contato para solicitar mais detalhes, ok?
Abrao!
Alexandre comentou em 18/09/2014 s 23:05
Ol, Andr parabns sem sombra de dvidas excelente seu post e
principalmente o funcionamento do seu demo, estava tentando aplicar
esse conceito nos meus desenvolvimentos porm sem sucesso. Seu
post caiu como uma luva para meu aprendizado. Gostaria se fosse
possvel que me enviasse mais detalhes da camada de persistncia
referente ao DAO que voc mencionou, pois minha dvida igual ao do
Jonathan/Genilson. Muito obrigado pela sua publicao est me
ajudando e muito. Abraos.
Andr Luis Celestino comentou em 19/09/2014 s 21:06
Ol, Alexandre! Muito obrigado pela visita e pelo comentrio!
O MVC, por no disponibilizar uma camada exclusiva para a persistncia
de dados, acaba gerando algumas incertezas mesmo. Porm, nada
impede que o desenvolvedor estenda a camada Model e crie uma
camada de persistncia, no caso, a DAO. Vou lhe enviar um e-mail com
mais explicaes, ok?
Abrao!
Alexandre comentou em 20/09/2014 s 00:27
Eu que tenho que agradecer pelo seu post e pelo seu retorno. Pois foi
atravs dele que comeou a sair meu primeiro laboratrio. E olhe que
eu pesquiso muito na net a procura do solues. Se voc tiver algum
material a respeito ou at mesmo um curso ficaria muito grato.
Andr Luis Celestino comentou em 21/09/2014 s 09:11
Legal, Alexandre! Fico feliz por ter contribudo para o seu primeiro
projeto.
Abrao!
Alexandre comentou em 28/09/2014 s 22:41
Boa noite, tudo bem ? Por um acaso voc teria algum exemplo de MVC
com Firedac ou onde eu poderia encontrar algum material a respeito ?
Obrigado.

Andr Luis Celestino comentou em 30/09/2014 s 17:56


Ol, Alexandre! O FireDAC um recurso relativamente novo, portanto,
ainda existem poucos materiais sobre ele. Mesmo assim, a prpria
documentao do FireDAC no site da Embarcadero j uma grande
fonte de ajuda:
http://docs.embarcadero.com/products/rad_studio/firedac/frames.html
Abrao!
Cleiton Ferreira comentou em 03/11/2014 s 16:59
Andr, muito bom seu artigo sobre MVC parabns, acredito que um dos
mais esclarecidos pra quem trabalha com Delphi Client/Server hoje.
Poderia falar mais sobra a camada DAO e, em quais pontos ela torna
mais vivel que usar apenas MVC.
Como posso dividir a tarefa entra a Model e a DAO.
Obrigado pela ateno
Andr Luis Celestino comentou em 03/11/2014 s 17:16
Ol, Cleiton, tudo certo?
J recebi vrias dvidas sobre a camada DAO incorporada no MVC, e
algumas delas j foram respondidas nos FAQs do blog.
Vou enviar algumas dessas dvidas respondidas para o seu e-mail.
Espero que elas possam ajud-lo!
Abrao!
Alexandre comentou em 12/11/2014 s 00:05
Ol, tudo bem ? precisava tirar uma dvida com voc. Como eu faria
para criar um atributo para checar se existe campo auto-incremento ?
estou apanhando nessa parte. Obrigado.
Andr Luis Celestino comentou em 13/11/2014 s 21:30
Ol, Alexandre!
No entendi muito bem a sua pergunta. Entrarei em contato, ok?
Abrao!

Deixe um comentrio!
Nome (Obrigatrio)
E-mail (No ser publicado)
Site (Opcional)

2014 - SubRotina foi desenvolvido com WordPress por Andr Luis Celestino

Você também pode gostar