A Arquitetura em Camadas para aplicações JavaFX é uma abordagem essencial na construção de softwares, especialmente em projetos que utilizam essa tecnologia. Essa estrutura proporciona uma organização mais eficaz do código, tornando a manutenção e a escalabilidade do projeto mais simples. Neste artigo, vamos explorar a importância da Arquitetura em Camadas, detalhar sua estrutura em um projeto JavaFX e apresentar um exemplo prático.
- O que é Arquitetura em Camadas?
- Estrutura do Projeto JavaFX
- Camada Model
- Camada DTO
- Camada DAO
- Camada Service
- Camada Controller
- Exemplo Prático de Implementação
- Conclusão
O que é Arquitetura em Camadas?
A arquitetura em camadas é uma forma de organizar o código em diferentes níveis, onde cada camada tem uma responsabilidade específica. Isso promove a separação de preocupações, permitindo que desenvolvedores trabalhem em partes diferentes da aplicação sem causar conflitos. Em um projeto JavaFX, as principais camadas incluem Model, DTO, DAO, Service e Controller. Esse tipo de organização em camadas também é conhecido como Camadas em N (N-Tier Architecture), referindo-se à flexibilidade de adicionar ou remover camadas conforme necessário, o que ajuda a escalar a aplicação de maneira eficiente.
Estrutura do Projeto JavaFX
Aqui está a estrutura de diretórios do projeto JavaFX, organizada segundo a arquitetura em camadas:
src/
├── main/
│ ├── java/
│ │ ├── com/
│ │ │ └── exemplo/
│ │ │ ├── model/ # Camada Model
│ │ │ │ └── Tarefa.java
│ │ │ ├── dto/ # Camada DTO
│ │ │ │ └── TarefaDTO.java
│ │ │ ├── dao/ # Camada DAO
│ │ │ │ └── TarefaDAO.java
│ │ │ ├── service/ # Camada Service
│ │ │ │ └── TarefaService.java
│ │ │ ├── controller/ # Camada Controller
│ │ │ │ └── TarefaController.java # Classe Controller
│ │ │ └── Main.java # Classe principal
│ └── resources/
│ ├── fxml/ # Arquivos FXML
│ │ └── tarefa_view.fxml
│ ├── images/ # Pasta para imagens
│ └── styles/ # Pasta para estilos CSS
└── test/
Camada Model
A camada Model é responsável por representar os dados da aplicação. Nesta camada, definimos as classes que representam as entidades do nosso sistema.
package com.exemplo.model;
public class Tarefa {
private String nome;
public Tarefa(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
Camada DTO
A camada DTO (Data Transfer Object) é utilizada para transferir dados entre as camadas. Os DTOs são simples e contêm apenas atributos sem lógica de negócio.
package com.exemplo.dto;
public class TarefaDTO {
private String nome;
public TarefaDTO(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
Camada DAO
A camada DAO (Data Access Object) é responsável pela interação com o banco de dados ou qualquer fonte de dados. Neste exemplo, simularemos o armazenamento de tarefas em uma lista.
package com.exemplo.dto;
public class TarefaDTO {
private String nome;
public TarefaDTO(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
Camada Service
A camada Service contém a lógica de negócio da aplicação. É responsável por gerenciar as interações entre a camada DAO e o controlador.
package com.exemplo.service;
import com.exemplo.dao.TarefaDAO;
import com.exemplo.dto.TarefaDTO;
import com.exemplo.model.Tarefa;
import java.util.List;
public class TarefaService {
private TarefaDAO tarefaDAO = new TarefaDAO();
public void salvarTarefa(TarefaDTO tarefaDTO) {
Tarefa tarefa = new Tarefa(tarefaDTO.getNome());
tarefaDAO.salvar(tarefa);
}
public List obterTarefas() {
return tarefaDAO.listar();
}
}
Camada Controller
A camada Controller é responsável pela interação entre a interface do usuário e a lógica do aplicativo. Aqui, manipulamos eventos e atualizamos a interface com base nas ações do usuário.
package com.exemplo.controller;
import com.exemplo.dto.TarefaDTO;
import com.exemplo.model.Tarefa;
import com.exemplo.service.TarefaService;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import java.util.List;
public class TarefaController {
@FXML
private TextField tarefaField; // Campo de texto para entrada de tarefa
@FXML
private Button adicionarButton; // Botão para adicionar tarefa
@FXML
private VBox tarefasContainer; // Container para exibir as tarefas
private TarefaService tarefaService = new TarefaService();
@FXML
public void initialize() {
adicionarButton.setOnAction(event -> adicionarTarefa());
listarTarefas();
}
public void adicionarTarefa() {
String nome = tarefaField.getText();
if (!nome.isEmpty()) {
TarefaDTO tarefaDTO = new TarefaDTO(nome);
tarefaService.salvarTarefa(tarefaDTO);
tarefaField.clear();
listarTarefas();
}
}
public void listarTarefas() {
tarefasContainer.getChildren().clear(); // Limpa o container
List tarefas = tarefaService.obterTarefas();
for (Tarefa tarefa : tarefas) {
Label tarefaLabel = new Label(tarefa.getNome());
tarefasContainer.getChildren().add(tarefaLabel); // Adiciona cada tarefa ao container
}
}
}
Exemplo Prático de Implementação Classe Main
Vamos implementar a classe principal que inicia a aplicação e carrega a interface do usuário.
package com.exemplo;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Gerenciador de Tarefas");
Parent root = FXMLLoader.load(getClass().getResource("/fxml/tarefa_view.fxml")); // Carrega o FXML
Scene scene = new Scene(root, 400, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Conclusão
A arquitetura em camadas é uma abordagem eficiente para a construção de aplicações JavaFX, promovendo a separação de preocupações e facilitando a manutenção do código. Neste artigo, exploramos as camadas Model, DTO, DAO, Service e Controller, além de fornecer um exemplo prático de implementação. Com essa estrutura, você pode desenvolver aplicações mais organizadas e escaláveis, tornando-se um desenvolvedor JavaFX mais eficaz.