Estructura de los proyectos¶
Para las tareas de clase vamos a seguir una estructura que iremos perfilando basada en el MVC. Para ello hay que ser ordenados y saber qué forma un proyecto.
proyecto/
├── app/
│ └── MainApp
├── model/
│ └── Login
├── mysql/
│ └── LoginHandleDB
└── util/
└── DatabaseConnection
Creando la BBDD¶
Lo primero que tendremos que hacer asegurarnos de que tenemos el servidor de base de datos instalado y la base de datos creada con las tablas que necesitemos para nuestra aplicación.
Clase Connection¶
Conectar a la BD es un coste muy grande, ya que es un proceso lento, por lo tanto, implementaremos la clase de conexión a la base de datos utilizando el patrón singleton. Esta clase estará ubicada dentro del paquete util.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
private static Connection connection = null;
// Constructor privado para evitar instanciación
private DatabaseConnection() {}
// Bloque estático para inicializar la conexión
static {
String url = "jdbc:mysql://localhost/gobiernomundial";
String user = "luffy";
String password = "dmonkey";
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
// Método para obtener la conexión
public static Connection getConnection() {
return connection;
}
// Método para cerrar la conexión
public static void close() throws SQLException {
if (connection != null && !connection.isClosed()) {
connection.close();
}
}
}
Creando el modelo¶
El modelo contiene una representación de ellos datos que maneja la aplicación y su lógica de negocio.
Para el ejemplo, el modelo de Login debe contener los atributos que contiene la tabla login como variables de la clase Normalmente los modelos de la clase se encuentran en un paquete llamado model
.
import java.time.LocalDateTime;
public class Login {
private int id;
private String username;
private String password;
private LocalDateTime createdAt;
// Constructores
public Login() {}
public Login(int id, String username, String password, LocalDateTime createdAt) {
this.id = id;
this.username = username;
this.password = password;
this.createdAt = createdAt;
}
// Getters y Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
// Método toString
@Override
public String toString() {
return "Login{" +
"id=" + id +
", username='" + username + '\'' +
}
}
Clases para la manipulación de la base de datos¶
Dentro del paquete mysql
añadiremos clases que serán las encargadas de manipular la información contra la base de datos.
En el ejemplo tenemos una clase que realiza la manipulación de la información referente a la tabla login
.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class LoginAccessDB {
private static Connection con = DatabaseConnection.getConnection();
public List<Login> getLogins() throws SQLException {
String sql = "SELECT * FROM login";
List<Login> logins = new ArrayList<>();
try (Statement statement = con.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
while (resultSet.next()) {
Login login = new Login();
login.setId(resultSet.getInt(1));
login.setUsername(resultSet.getString("username"));
login.setPassword(resultSet.getString("password"));
login.setCreatedAt(resultSet.getTimestamp("created_at").toLocalDateTime());
logins.add(login);
}
}
return logins;
}
}
Test¶
Por último comprobamos que todo funciona correctamente haciendo una pequeña prueba en nuestro main
o punto de entrada al programa.
public class MainApp {
public static void main(String[] args) {
LoginAccessDB loginHandleDB = new LoginAccessDB();
try {
for (Login l : loginHandleDB.getLogins()) {
System.out.println(l);
}
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
}
}
Fichero README¶
El archivo README es el primer archivo que un desarrollador debe mirar antes de embarcarse en un proyecto, por lo que también es esencial saber cómo escribir un buen archivo README, para que toda la información relevante se presente de forma compacta.
Ayuda a crearlo
Además de hacerlo nosotros, existen proyectos que nos ayudan a generarlo como es readme.so
¿Qué suelen incluir los ficheros README?¶
Suelen incluir información sobre:
- Una descripción general del sistema o proyecto.
- El estado del proyecto, que es particularmente importante si el proyecto está todavía en desarrollo. En él se mencionan los cambios planeados y la dirección de desarrollo del proyecto, y se especifica directamente si un proyecto está terminado.
- Los requisitos del entorno de desarrollo para la integración.
- Una lista de las tecnologías utilizadas y, cuando proceda, enlaces con más información.
- Bugs conocidos y posibles correcciones de errores.
- Sección de preguntas frecuentes con todas las preguntas planteadas hasta la fecha.
- Información sobre derechos de autor y licencias.