Java - Criando uma aplicação em 3 camadas (MVC)

Comentar

O passo a passo para a criação de uma aplicação usando Java, com Banco de Dados (BD) chamado H2 na estrutura MVC (Modelo, Visão e Controle)....

O passo a passo para a criação de uma aplicação usando Java, com Banco de Dados (BD) chamado H2 na estrutura MVC (Modelo, Visão e Controle).
Será um exemplo com uma única classe sendo armazenada no BD.


Para os códigos que seguem abaixo, em todas as classes deve-se incluir o package correto e adicionar os imports necessários. Observe a divisão abaixo:
 - gui (Visão)
- LoginGUI
- ApiculturaGUI
- ClienteGUI
- controller (Controle)
- ApiculturaController
- IncluirClienteController
- persistência (Modelo)
- ClienteDAO
- FactoryConnection
- dominio (Modelo)
- Cliente



A primeira classe contém o famoso psvm (public static void main), que inicia a execução da aplicação:

public class Apicultura {
public static void main(String[] args) {
ApiculturaController app = new ApiculturaController();
}
}



A classe ApiculturaController.java controla a janela de Login e a que contém o Menu.
Se o usuário acertar a senha, que é única, a janela com menu será apresentada, caso contrário a aplicação é finalizada.
São instanciadas as classes com a interface gráfica e aqui são tratados os eventos.

public class ApiculturaController {
private ApiculturaGUI gui = null;
private LoginGUI guiLog = null;

public ApiculturaController() {
guiLog = new LoginGUI();
guiLog.adicionarOuvinteLogin (new OuvinteLogin());
}

class OuvinteLogin implements ActionListener {
public void actionPerformed (ActionEvent ev){
if (ev.getActionCommand() == "OK") {
String senha = String.valueOf(guiLog.pfSenha.getPassword());
if (senha.compareTo("SENHA")==0) {
guiLog.dispose(); // fecha a janela de login
gui = new ApiculturaGUI();
gui.adicionarOuvinte(new OuvinteIncluir());
}
else {
JOptionPane.showMessageDialog(null, "Senha Inválida!");
System.exit(0);
}
}
else System.exit(0);
}
}

class OuvinteIncluir implements ActionListener {
public void actionPerformed (ActionEvent ev) {
Object fonte = ev.getSource();
if (ev.getSource() instanceof JMenuItem) {
if (fonte == gui.mcSair) {
System.exit (0);
}
else
if (fonte == gui.mcCadastro) {
IncluirClienteController clienteController =
new IncluirClienteController();
gui.desktop.add(clienteController.guiCli);
}
}
}
}
}



A classe LoginGUI.java deve conter os componentes em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).

public class LoginGUI extends JFrame {
// declarar os componentes aqui como public

public LoginGUI() {
// tratar a parte gráfica aqui
}

public void adicionarOuvinteLogin (ActionListener ouvinte) {
this.btOK.addActionListener(ouvinte);
this.btCancelar.addActionListener(ouvinte);
}
}

Um exemplo para a interface gráfica de Login é a seguinte:

Login


A classe ApiculturaGUI.java é a que contém o menu, usando as classes DesktopPane e JInternalFrame. Observe a implementação:

public class ApiculturaGUI extends JFrame {
public JDesktopPane desktop;
public JMenuBar barraDeMenu;
public JMenuItem mcCadastro, mpCadastro, mcSair, miSobre;

public ApiculturaGUI() {
this.setTitle("Sistema de Controle de Produção Apícula");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

barraDeMenu = criaMenu();
this.setJMenuBar(barraDeMenu);

desktop = new JDesktopPane();
this.setContentPane(desktop);
this.setVisible(true);
}

public JMenuBar criaMenu() {
// crie seu menu com os componentes JMenu, JMenuBar e JMenuItem
}

public void adicionarOuvinte (ActionListener ouvinte) {
this.mcCadastro.addActionListener(ouvinte);
this.mcSair.addActionListener(ouvinte);
}
}

Como aconteceu na classe LoginGUI.java, a classe ApiculturaGUI deve conter os componentes para a criação do menu em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).

Veja como fica o Front-end da aplicação:

Menu
Observe que o JPanel contém uma imagem de fundo. Para maiores detalhes, acesse a explicação clicando aqui.


A próxima classe é a IncluirClienteController.java que chama a interface gráfica para a classe Cliente e trata os eventos que serão adicionados pela classe ClienteGUI.java.

public class IncluirClienteController {
public ClienteGUI guiCli;

public IncluirClienteController() {
guiCli = new ClienteGUI();

guiCli.adicionarOuvinteCliente1 (new OuvinteIncluirCliente1());
}

class OuvinteIncluirCliente1 implements ActionListener {
public void actionPerformed(ActionEvent ev){
Object fonte = ev.getSource();
if (fonte == guiCli.bSaiCli)
guiCli.dispose();
else if (fonte == guiCli.bLimCli)
guiCli.limparCampos();
else if (fonte == guiCli.bExcCli) {
ClienteDAO clienteDAO = new ClienteDAO();
clienteDAO.excluirCliente(guiCli.tfcodcli.getText());
guiCli.limparCampos();
}
else if (fonte == guiCli.bConCli) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = clienteDAO.consultarCliente();
if (cliente != null)
mostrarCliente(cliente);
}
else if (fonte == guiCli.bIncCli) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = obterCliente();
clienteDAO.incluirCliente(cliente);
guiCli.limparCampos();
}
else if (fonte == guiCli.bAltCli)
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = obterCliente();
clienteDAO.alterarCliente(cliente);
}
}
}
}

public Cliente obterCliente(){
Cliente cliente = new Cliente();
// Aqui deve-se obter todos os dados contidos nos componentes
// e preencher o objeto cliente.
// Exemplo: cliente.setNomCli(guiCli.tfnomcli.getText());
return cliente;
}

public void mostrarCliente(Cliente cliente){
// Aqui deve-se obter todos os dados contidos no objeto cliente
// e preencher os componentes da interface gráfica
// Exemplo: guiCli.tfnomcli.setText(cliente.getNomCli());
}
}



A classe ClienteGUI.java contém apresentação da interface gráfica para tratar os dados do Cliente.
Veja o exemplo:

Interface_Cliente
Veja o trecho do código:

public class ClienteGUI extends JInternalFrame {
// declarar os componentes da interface

public ClienteGUI() {
// criar a interface gráfica
}

public void adicionarOuvinteCliente1 (ActionListener ouvinte) {
// adicionar os ouvintes aos botões
// Ex.: this.bIncCli.addActionListener(ouvinte);
}

public void limparCampos() {
// comandos para limpar os componentes
}
}

O menu está no JDesktopPane e as demais janelas serão JInternalFrame.


A classe que controla Cliente (IncluirClienteController.java) também precisa da classe Cliente.java que tem a definição dos atributos e dos métodos acessores (get) e modificadores (set).
Veja parte do código:

public class Cliente {
// declare todos os atributos como private
private int codcli;
private String nomcli;

public Cliente() {
super();
}

public Cliente (int codcli, String nomcli){
super();
this.codcli = codcli;
this.nomcli = nomcli;
}

public int getCodCli(){
return this.codcli;
}

public String getNomCli(){
return this.nomcli;
}

public void setCodCli(int codcli) {
this.codcli = codcli;
}

public void setNomCli(String nomcli) {
this.nomcli = nomcli;
}
}



A classe ClienteDAO.java (Data Access Object) trata das rotinas de inclusão, exclusão, alteração e consulta, ou seja, trabalha diretamente com a fonte de dados (o BD). Todos os seus métodos realizarão a conexão com o Banco de Dados, sendo assim, precisam instanciar um objeto da classe FactoryConnection.java.
Ex.: Connection con = FactoryConnection.getConnection();

public class ClienteDAO {
public void incluirCliente(Cliente cliente) {
// tratar inclusão
}

public Cliente consultarCliente() {
// tratar consulta
return cliente;
}

public void alterarCliente(Cliente cliente) {
// tratar alteração
}

public void excluirCliente(String strcod) {
// tratar exclusão
}
}

Para maiores detalhes, clique aqui e acesse o Fórum Programação Java - Dicas que contém detalhes da classe ClienteDAO.


A classe FactoryConnection apresenta a conexão com o Banco de Dados, que neste exemplo será o H2.

public class FactoryConnection {
public static Connection getConnection(){
Connection con = null;
try {
Class.forName("org.h2.Driver");
String url = "jdbc:h2:tcp://localhost:9092/C:/DB/Banco";
String user = "admin";
String password = "senha";
con = DriverManager.getConnection(url, user, password);
} catch (Exception e){
e.printStackTrace();
}
return con;
}
}

Trabalhando dessa forma, suas classes ficam menores e bem dividas por assunto!
O códigos foram didaticamente apresentados! Portanto, use sua criatividade e melhore-os!


Links para pesquisa:
Padrões de Projeto : O modelo MVC

COMMENTS

BLOGGER: 35
  1. Muito bom esse artigo..

    ResponderExcluir
  2. Fala mano, sou faltou o codigo fonte para baixar :) mesmo assim vlw

    ResponderExcluir
  3. Excelente escritura rapaz! até favoritei! :D

    ResponderExcluir
  4. Muito bom, deu para ter uma ideia, mas para ilucidar melhor quem está a começar, aconselharia colocar uma classe completa. Parabéns

    ResponderExcluir
  5. Ola pessoal,preciso fazer uma sintese sobre o artigo acima,mais não faço ideia de como fazer....alguem poderia me ajudar????
    Desde ja agradeço.....

    ResponderExcluir
  6. Opa excelente explicação!! agora como o companheiro a ei em cima falou só falto o código para download, se caso tiver manda pro meu maio ok?! estou precisando irei apresentar um trabalho a respeito na facul, vlw!
    ** rodrigobegoti@hotmail.com **

    ResponderExcluir
  7. Ué? Não é só copiar e colar?

    ResponderExcluir
  8. realmente perfeito.. show de boa....so queria o código fonte a parti desse aplicativo conseguiria fazer qualquer outro CRUD em MVC perfeito..

    ResponderExcluir
  9. Amigo, bom o seu artigo, mas uma coisa é 3 camadas, outra coisa é MVC.
    3 camadas é quando tem cliente->servidor_aplicação->servidor_dados

    MVC é outra coisa. É possível utilizar 3 camadas com MVC, mas são duas coisas distintas.

    Jonatas Fischer

    ResponderExcluir
  10. Ola! Gostei muito do tutorial.
    Mas alguém conseguiu completar o código?
    Estou com vontade de completar e disponibilizar.
    Tenho certeza que será uma boa contribuição.
    Será que alguém tem algun outro link com turoial parecido?
    SDS
    Deluqui

    ResponderExcluir
  11. Excelente cara...

    System.out.print("Blog Adcionado aos favoritos com Sucesso ");

    SDS.

    ResponderExcluir
  12. Olá, tenho feito um sistema com sua ajuda com a ajuda deste forum, mas preciso de umas dicas ainda, tem como entrar em contato?

    doug_sciani@hotmail.com

    obrigado pelo tuto.

    ResponderExcluir
  13. oi bom dia, vc teria a classe3 adicionarOuvinteCliente1 para ter uma idéia de como fazer, obrigado

    rs-galhardo@bol.com.br

    ResponderExcluir
  14. Ótimo post, suas informações são muito importantes, boa iniciativa

    Abraços,
    Ranieri Marinho de Souza
    SEGR - Segurança da Informação
    http://blog.segr.com.br

    ResponderExcluir
  15. Ótimo post, suas informações são muito importantes, boa iniciativa

    Abraços,
    Ranieri Marinho de Souza
    SEGR - Segurança da Informação
    http://blog.segr.com.br

    ResponderExcluir
  16. Artigo espetacular a muito tempo venho procurando algo assim e finalmente encontrei muito obrigado

    ResponderExcluir
  17. Artigo excelente!

    Muito obrigado, tirou muitas das minhas dúvidas!

    Abraços.

    ResponderExcluir
  18. A profa. Gilene ficará muito feliz com os agradecimentos e de saber que o texto está dirimindo muitas dúvidas. Lembrando que o post está aberto à saudável discussão acadêmica.

    Abraços.

    ResponderExcluir
  19. Excelente post fico feliz por ter pessoas inteligentes e solidarias ajudarem outras como você me ajudou.Vou desenvolver desta forma.Muito obrigado e boas festas.

    ResponderExcluir
  20. boas eu gostei do artigo se bem que estou a ter alguns problemas.. epossivel por todo o codigo do programa desde a parte grafica ate aao mais minimo codigo? eu sei que é estar a pedir a papa toda mas estou a ter alguns problemas visto que estou a entrar no Mundo JAVA

    caso queira contactar minibytexxx@hotmail.com

    ResponderExcluir
  21. MUITO BOM!

    Brigadão aí!

    ResponderExcluir
  22. Nossa! Ótimo post!
    Ajudou pra caramba na organização dos códigos de um projeto que estou fazendo.
    Só tenho uma dúvida... A classe Cliente que contém os atributos privados e os métodos GET e SET fica em que nível nesse exemplo?? isto é, que pacote??
    Seria possível postar como ficaria o diagrama de classes desse exemplo?

    ResponderExcluir
  23. Olá, ajudou bastante. Mas poderia disponibilizar o código para baixar, ou colocar as classes completas.

    ResponderExcluir
  24. Olá gostaria de dizer que é um ótimo tutorial, porém estou com um problema na view. Segui os comentarios do código, mas quando o internal frame é chamado ele, digamos assim, da um bug no desktop pane, como se fosse bug de placa de vídeo. Para fins de lucidar dúvidas criei o internal frame direto no construtor do "ApiculturaGUI", e então o bug do vídeo não ocorre. Portanto se eu adicionar pelo IncluirControlleCliente da o bug.
    Caso possa indicar uma solução serei grato.

    ResponderExcluir
  25. WI VALEU MTO, DEU PARA TER E DAR UMA INICIATIVA, MTO ILUSTRATIVO E PRÁTICO..........CONTINUE,.

    ResponderExcluir
  26. Além de eu favoritar seu site, estou divulgando ele na faculdade e no curso de software
    muito obrigado pela ajuda...
    parabéns, sucesso !!!

    ResponderExcluir
  27. Parabéns, seu material é muito didático e valioso para o aprendizado, você é um modelo que deve ser compartilhado.
    Sucesso e continue.
    Obrigado

    ResponderExcluir
  28. Alguem poderia me dizer qual gerenciador de layout foi usado para a janela IncluirCliente?

    Grato

    ResponderExcluir
  29. Buscando pra cima e pra baixo na internet como fazer um aplicação em java MVC, só achava artigos difíceis de entender.Mas finalmente entendi nesse seu artigo.Muito Obrigado mesmo!

    ResponderExcluir
  30. Realmente um ótimo tutorial sobre MVC.

    ResponderExcluir
  31. Olá gente, alguém tem esse exemplo completo que possa me enviar? danielfariaptu@gmail.com

    ResponderExcluir
    Respostas
    1. Ola Daniel se por acaso ja tiveres esse exemplo completo agradadecia que enviasse pra mim ... robertoccguimaraes@gmail.com

      Excluir
Deixe suas impressões digitais aqui...

$show=mobile

Nome

#existepesquisanobrasil,1,A divulgar,2,Abelha,3,Acessibilidade,20,acessório,2,Acidente,48,Acidentes,2,Acústica,16,Adágios,1,Adestramento,5,Administração,27,adulto,1,Aerodinâmica,4,Aeronáutica,8,África,6,Agência Brasil,19,Agência Fiocruz,1,Agência Porvir,1,Agência Senado,1,Agência USP,4,Agricultura,4,Agropecuária,2,AIDS,1,AirBNB,1,Alcoolismo,7,Alemanha,3,Alerta,1,Algoritmo,8,Alimento,1,Alzheimer,4,Amazon,2,Amazônia,4,América Latina,1,Análise Combinatória,1,Anatomia,7,Android,3,Animação,47,Animais de Estimação,6,Animal,2,Antropologia,14,Apicultura,8,App,9,Apple,5,Apresentação,4,aquário,1,Argentina,4,Arqueologia,5,arquitetura,29,Arte,151,Astrobiologia,2,Astrofísica,3,Astronomia,25,Ativismo,26,Áudio,3,Audio FX,2,Áustria,1,Autismo,2,Auto-ajuda,10,Automobilismo,14,Automóvel,19,aventura,3,Aviação,5,Aviônica,8,Bahia,2,Balonismo,3,Banco Central,1,Banco de Dados,5,Beber e Dirigir,1,biblioteconomia,3,Bicicleta,1,Biografia,16,Biologia,157,Biologia Marinha,15,bioquímica,6,Biotecnologia,25,Bitcoin,2,Blog,29,Blogger,32,Boato,5,Bomba,1,borderô de desconto,1,Botânica,5,BRASA,1,BRASA Leads,1,Brasil,34,Brasília,14,BRIC,1,Browser,10,Bugs,3,CAD,3,Calor,2,Câmera lenta,1,Campanha,44,cardiologia,14,Carnaval,2,carreira,2,Cartografia,3,Casemods,1,Caso Isabella Nardoni,1,Caso Snowden,1,Ceará,1,Celebridades,6,celular,24,Células-Tronco,3,Cérebro,2,Charge,22,China,16,Cibercultura,2,Ciclovia,1,Cidadania,39,Ciência,183,Cinema,63,Clip,1,Cliparts,1,Cloud computing,4,Coaching,12,Comédia,2,competência,1,Complemento de dois,1,Comportamento,251,Computação,81,Computação em grade,5,Computação forense,3,Computação Gráfica,135,Computação Móvel,1,Computação Quântica,1,Comunicação e Marketing,131,Concurso,1,Concurso Cultural de Natal,1,Concursos Público,2,Concursos Públicos,3,Conectômica,1,Conferência,1,Congresso em Foco,1,Conspiração,2,Consumidor,7,Consumismo,3,contabilidade,2,Contos,47,Copa do Mundo,27,Cordel,3,Coreia do Norte,1,Coreia do Sul,1,Corpo,2,Coruja,1,cosmética,3,Cosmologia,21,Crash Course,1,Criança,1,Criatividade,3,Crime,46,Crime Digital,7,crise,11,crise econômica,8,crônica,5,crônicas,5,Cronologia,1,CSS,3,Cuba,4,Culinária,8,Cultura,9,Curiosidades,112,custos fixo,1,custos variáveis,1,Dança,6,DAO,1,Darwin,9,Davos,1,Debate,1,Decoração,1,demência,1,Demografia,3,Denúncia,10,Dermatologia,7,Desastre Natural,13,Descoberta,2,desconto duplicatas,1,Desenho instrucional,11,Desenvolvimento de jogos,9,Design,25,Design Instrucional,6,Destaque,25,Dia das Mães,1,Dia do professor,1,diabetes,6,Dicas,66,Didática,1,Dieta,3,diplomacia,3,Direito,174,Direito Eleitoral,1,Direito Internacional,28,Direito Trabalhista,1,Direito Tributário,2,Direitos Autorais,1,Direitos Humanos,37,Disney,5,Distrito Federal,2,Documentário,60,Doutorado,1,download,3,Drogas,7,Drone,3,Dubai,1,e-Book,2,e-governo,2,EBC,1,Ecologia,81,Economia,107,Editoração Eletrônica,1,Educação,335,Educação a Distância,147,Educação Corporativa,4,educação física,19,Educação sexual,6,Efeitos Sonoros,4,Egiptologia,1,Eleições,23,Eleições 2014,12,Eleições 2018,5,Eletricidade,9,eletrônica,3,Em Operários,1,Embrapa,1,empreendedorismo,6,enciclopédia,1,endocrinologia,5,Enem,3,Energia,14,Energia Alternativa,16,Energia Nuclear,11,Engenharia,62,Engenharia Agrícola,1,Engenharia Civil,4,Engenharia de materiais,13,Engenharia de Software,4,Engenharia Genética,30,Engenharia Mecânica,1,Enretenimento,1,Ensino a Distância,9,Ensino Superior,3,Entomologia,7,Entretenimento,41,Entrevista,86,Entrevista.,1,Epidemiologia,21,Epistemologia,1,Equador,1,Escândalo,5,Escritório,1,Espaço,66,Espanha,1,Espanhol,2,Espeleologia,1,Espetáculo,8,Espionagem,20,Esporte,39,Estação,1,Estágio,2,Estatísticas,32,estrutura de dados,1,Ética,24,EUA,14,Europa,2,Evento,37,Evolução,4,Exercícios físicos,2,Exobiologia,2,experiência,42,fábulas,3,Facebook,17,Farmacologia,8,Favo,1,Feminismo,1,Férias,1,Ferramentas,6,FIFA,2,Filantropia,4,Filmes,16,Filosofia,47,Finlândia,1,Fintech,1,Firefox,1,Física,103,Física Quântica,3,Fisiologia,7,Fisioterapia,6,Flagrante,2,Flamengo,1,Folclore,3,Fome,1,Fonética,1,Fonoaudiologia,6,Fotografia,40,Fotos em 360 graus,6,França,6,Francês,2,frases,2,Fraude,5,Freeware,68,Futebol,38,Futurologia,81,gadget,88,Gafe,2,Gamificação,5,Gastroenterologia,5,Gastronomia,2,Geek,1,Genética,39,Geofísica,1,Geografia,52,Geologia,10,Geometria,6,geopolítica,20,Gerenciamento do Tempo,1,Geriatria,10,Gestão de Competências,2,Gestão de Configuração,2,Gestão de Pessoas,3,Gestão de Projetos,17,Gestão do conhecimento,6,Ginecologia,3,Glass,1,Google,79,Governo,4,GPS,1,Gradiente,1,gramática,13,Gravidez,1,Grécia,1,Grécia Antiga,1,Guerra,36,Guerra Civil,2,Guinness,1,H2,2,Haiti,3,hardware,35,História,194,HIV,1,Hololens,2,homenagem,45,Horologia,1,HPV,1,HTML,6,Humor,209,Humor Negro,8,IBGE,2,IBM,4,ICIJ,2,Idioma,46,IHC,8,ilo,29,ilusão,34,ilusionismo,5,Imagem 3D,16,Imagens,6,Imagine Cup,1,Império Romano,6,Imprensa,33,Impressora 3D,16,Imunologia,2,Incêndio,2,Inclusão digital,8,Índia,3,Índios,1,Infectologia,16,Infográfico,48,Informática,38,Inglaterra,3,Inglês,25,Inovação,180,Inspiração,1,Inteligência Artificial,98,intercâmbio,1,Interface,189,Interfaces Hápticas,20,Internacional,22,Internacionalização da Amazônia,3,Internet,160,Internet das Coisas,2,Inundação,2,Invenção,20,Inventos,6,iPad,1,IPEA,1,iphone,3,Irã,3,Iraque,1,Israel,6,Japão,2,Java,2,Java.,2,jogos,10,Jogos educativos,13,Jogos Olímpicos,10,Jornalismo,69,Justiça,4,Kinect,10,Le Monde Diplomatique Brasil,9,Le Monde Diplomatique Brasil,1,Letras,1,Lexicografia,5,Liderança,3,Life Hacking,20,Linguística,9,Literatura,55,Livro,58,Lógica,25,Logística,4,Loterias,4,Lua,1,Maçonaria,4,Malásia,2,Malvinas,2,Malware,1,Mapa,69,Mário Sérgio Conti,1,Marte,2,Mastologia,1,Matemática,76,Matemática Financeira,1,maternidade,1,Mecânica,8,Mecânica dos Fluidos,2,Mecatrônica,46,Medicina,471,Medicina Esportiva,1,Medicina Veterinária,4,Meio Ambiente,104,Mel,1,melanoma,1,Memória,5,memorização,4,Mente,4,Mercado de Trabalho,71,mercosul,1,Mestrado,1,meteorologia,11,Metodologia Científica,44,México,1,Microbiologia,4,Microsoft,14,Mídia Social,54,Militar,14,Mineralogia,1,Mistério,2,MIT,12,Mitologia,2,Mobilidade,1,Mobilidade Urbana,9,MonaVie,1,Montanhismo,1,Moodle,7,Mossad,1,Motivação,1,Movimento Maker,1,MSF,1,Mudança Climática,20,Mulher,4,Multimídia,14,museu,10,Música,83,MVC,1,Nanotecnologia,33,Nasa,16,Natação,2,Natal,17,Natureza,1,Negócios,25,Netflix,1,Neurociência,84,Neurologia,77,Nicolelis,1,Nordeste,2,Noruega,1,notícias,8,Novidades,18,Novo Enem,2,Números,1,Nutrição,63,Obama,1,Obesidade,10,Observatório da Imprensa,26,Obstetrícia,3,Oceanografia,7,odontologia,7,Offshore Leaks,2,oftalmologia,11,Olimpíadas,7,oncologia,45,ONU,8,Opinião,92,Óptica,17,Oracle,1,Oriente Médio,5,Orkut,2,Ornitologia,1,ortografia,3,Ortopedia,3,Ótica,8,Otorrinolaringologia,1,Oxfam,2,Pacifismo,1,Paginadores,1,paleontologia,3,Paquistão,1,Pará,2,Paraguai,2,parkinson,2,Passeio virtual,1,Patinação,1,Pedagogia,1,Pediatria,6,Pensamentos,2,performance,2,Periférico,1,Pesca,2,Pesquisa,199,Petição,1,Petrobrás,9,Petróleo,12,Photoshop,5,Pirataria,7,planilha de custo,1,Playstation 3,2,Plebiscito,3,Pneumologia,1,Podcast,4,Poesia,28,Poítica,1,Politica,5,Política,288,Portugal,6,português,18,Pós-graduação,1,prazo médio,1,Pré-sal,5,Prêmio Nobel,6,primatologia,1,Primeira Guerra Mundial,1,privacidade,18,produtividade,3,professor Hamilton Alves,2,Programa Gratuito,4,Programação,51,Projeção Mapeada,1,Projeto Truco,2,Promoção,1,Propaganda,5,Psicanálise,1,Psicologia,267,Psicologia Animal,24,Psiquiatria,13,Pública,12,publicidade,19,Publieditorial,4,Quadrinhos,10,Quads,5,Qualidade,3,Qualidade de Vida,11,química,32,REA,2,realidade aumentada,44,realidade diminuída,2,Realidade Misturada,2,Realidade Virtual,37,Reconhecimento de imagem,12,Reconhecimento de voz,3,Recorde,1,Recoverit,1,Recuperar vídeos,1,Redação,1,redes,10,Referência,2,Referendo,1,Reforma Política,3,Reino Unido,1,Relacionamento,2,Relações Internacionais,40,Religião,39,Responsabilidade Social,4,Retrospectiva,1,Review,4,Rio 2016,6,Rio de Janeiro,1,Rio Grande do Norte,1,Rio Grande do Sul,1,robótica,97,Roda Viva,46,Roma,5,roteiro,1,RSA,1,Rússia,1,Samsung,1,Sanitarismo,5,Santa Catarina,1,São Paulo,4,Saúde,488,Savant,1,Segunda Guerra Mundial,23,Segurança,117,Segurança da Informação,60,Seleção Natural,2,Séries,2,serviço,1,Serviço Online,1,Sexologia,2,sexualidade,5,Show,7,SIGGRAPH,1,Simulação,29,Singularity University,1,Síria,3,Sismologia,2,Sistema operacional,4,Sistemas de Numeração,1,Sites de Busca,14,Sociedade,4,Sociologia,52,Software,32,Software Livre,25,Sol,2,Sono,4,Sony,2,SOPA,2,Star Wars,1,Suécia,3,Sugestão de presentes,61,Sun,1,supercomputadores,2,Sustentabilidade,5,Tabagismo,6,Taiwan,1,Talento precoce,1,taxa de juros efetiva,1,taxa de juros nominal,1,Taxas Equivalentes,1,Taxidermia,1,Teatro,26,Técnicas de Estudo,2,Tecnologia,540,Tecnologia da Informação,28,TED,390,TED-Ed,40,TedMed,2,TEDx,1,TEDx Rio+20,1,TEDxAmazônia,1,TEDxAsaSul,1,Telefonia,59,Televisão,43,Temas,1,Tempo,1,Tendências,10,Teologia,5,teoria das supercordas,1,Terremoto,7,Terrorismo,15,Tesla,1,Testes,17,Tipologia,8,Tomada de Decisão,1,tradução,5,Trânsito,11,transporte,55,tributo,3,Trigonometria,1,Tubarão,2,Tunísia,1,Turismo,21,Tutorial,20,Twitter,8,Uber,4,UFC,1,UFG,1,ufologia,5,UFRJ,1,Unicamp,1,UNIFESP,1,universidade,5,Universidade Corporativa,1,Universidade de Cambridge,2,Universidade de Michigan,1,Universidade de Princeton,1,Urbanismo,23,Urologia,1,User Experience,1,USP,6,Utilidade Pública,3,Utilitário,3,Vale,1,Vaticano,1,Veículo Autônomo,7,Ventriloquismo,3,Verão,1,vestibular,3,Vestimenta,1,Vida Digital,7,Vida Moderna,18,Vida Selvagem,10,Videogame,114,Vídeos,932,Vídeos 360,1,Violência,5,Vírus,2,Visão Computacional,9,Vôlei,1,Vulcanologia,6,Watergate Política,1,WCIT 2016,2,WCIT 2017,1,Web 2.0,29,Web Application,137,Web Semântica,2,Web Seminar,1,webdesign,11,Webinar,2,widget,2,WikiLeaks,37,Wikipedia,4,Windows,5,Xadrez,2,YouTube,6,Zika,1,Zoologia,56,
ltr
item
Brasil Acadêmico: Java - Criando uma aplicação em 3 camadas (MVC)
Java - Criando uma aplicação em 3 camadas (MVC)
http://2.bp.blogspot.com/_cM2l6Y3Ulgg/SRjBQWJCUAI/AAAAAAAAA-Y/ADoT4anYxgc/s320/mvc.jpg
http://2.bp.blogspot.com/_cM2l6Y3Ulgg/SRjBQWJCUAI/AAAAAAAAA-Y/ADoT4anYxgc/s72-c/mvc.jpg
Brasil Acadêmico
http://blog.brasilacademico.com/2008/11/java-criando-uma-aplicao-em-3-camadas.html
http://blog.brasilacademico.com/
http://blog.brasilacademico.com/
http://blog.brasilacademico.com/2008/11/java-criando-uma-aplicao-em-3-camadas.html
true
3049085869098582068
UTF-8
Todos os posts carregados Nenhumpost encontrado VER TODOS Leia mais Responder Cancelar resposta Deletar Por Home Páginas POSTS Ver Todos Recomendado para você CATEGORIA ARQUIVO BUSCA TODOS POSTS Não encontrado nehum post de acordo com o seu critério Voltar para Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez agorinha 1 minuto atrás $$1$$ minutos atrás 1 hora atrás $$1$$ horas atrás Ontem $$1$$ dias atrás $$1$$ semanas atrás mais que 5 semanas atrás Seguidores Seguir THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy