Publicado el Deja un comentario

Usando IA para obtener estructura de carpetas

pile of folders

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:

Bash
├── 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> {

}
Java

En 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 entidad User.

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.