Usando la IA Gemini de Google para estandarizar mi estructura de las carpetas de mis aplicaciones java de acuerdo a los standares generales.
Durante mi carrera he armado mi propia estructura de carpetas AD-HOC usando como ejemplo las diversas aplicaciones que tenido que intervenir, finalmente llegé a una estructura que si bien es cómoda para mí, posiblemente sea algo compleja o poco natural para quien deba modificarla en el futuro, es por eso que me propuse ordenar de una forma más general y standard los archivos de mis futuros trabajos, si bien, era algo que hace tiempo deseaba hacer, por lo que preguntaba a otros colegas la forma en que ordenaban las carpetas.. pero vi que todos tenían sus propias formas de estructurar, ya sea por las características de los frameworks o simplemente por comodidad, finalmente llegé al mismo punto inicial.
Una idea interesante que tuve hoy fue la de consultar a la IA la respuesta a mi problema, esperando que esa voz inparcial me diese una solución sin sesgos y directa y quiero compartir este desarrollo por si alguien tiene esta misma duda y desea usar (o incluso complementar) esta respuesta, sólo por motivos de contextualizar el ejemplo le pedí que usara como base una aplicación SpringBoot Java:
├── app
│ ├── controllers
│ │ ├── HomeController.java
│ │ └── UserController.java
│ ├── entities
│ │ ├── User.java
│ │ └── ...
│ ├── repositories
│ │ ├── UserRepository.java
│ │ └── ...
│ ├── services
│ │ ├── IUserService.java
│ │ ├── UserService.java
│ │ └── ...
│ └── utils
│ ├── AppConfig.java
│ └── ...
└── src
├── main
│ ├── java
│ │ ├── com
│ │ │ ├── example
│ │ │ │ ├── App.java
│ │ │ │ └── ...
│ │ └── ...
└── resources
├── application.properties
└── ...
Explicación:
- app: Contiene el código fuente de la aplicación.
- controllers: Contiene los controladores MVC.
- entities: Contiene las clases de modelo que representan las entidades del sistema.
- repositories: Contiene los repositorios que implementan el patrón Repository para abstraer la lógica de acceso a datos.
- services: Contiene los servicios que encapsulan la lógica de negocio de la aplicación.
- utils: Contiene archivos de utilidades comunes a toda la aplicación.
- src/main/java: Contiene el código fuente de la aplicación Java.
- src/main/resources: Contiene los archivos de configuración y recursos de la aplicación.
Ejemplo de código:
Java
// UserController.java
@RestController
public class UserController {
@Autowired
private IUserService userService;
@GetMapping("/")
public String index() {
return "Hola Spring Boot!";
}
@GetMapping("/users")
public List<User> getAllUsers() {
return userService.findAll();
}
}
// UserService.java
@Service
public class UserService implements IUserService {
@Autowired
private UserRepository userRepository;
@Override
public List<User> findAll() {
return userRepository.findAll();
}
}
// UserRepository.java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
JavaEn este ejemplo:
- La clase
UserController
es un controlador MVC que expone dos endpoints:/
e/users
. - La clase
UserService
es un servicio que encapsula la lógica de negocio para la gestión de usuarios. - La clase
UserRepository
es un repositorio que implementa el patrón Repository para acceder a los datos de la entidadUser
.
Conclusión:
La estructura de carpetas propuesta para una aplicación Spring Boot es similar a la estructura de carpetas para una aplicación MVC con Model DAO Services. La principal diferencia es que la capa de acceso a datos se implementa utilizando la tecnología JPA (Java Persistence API).
Nota: Esta es solo una estructura de ejemplo, y puede ser modificada para adaptarse a las necesidades específicas de cada proyecto.
HOLA! si te gustó o te fue útil, por favor, considera dejarme un comentario