Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

236
Views
¿Qué métodos se deben escribir en la capa de servicio?

Intento seguir un tutorial sobre Spring MVC. En el tutorial está la interfaz UserDao (se usa Spring Data JPA)

 public interface UserDao extends JpaRepository<User, Long> { User findByUsername(String username); }

También existe UserService y UserServiceImpl

 public interface UserService { void save(User user); User findByUsername(String username); } @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Autowired private RoleDao roleDao; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @Override public void save(User user) { user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); Set<Role> roles = new HashSet<>(); roles.add(roleDao.getOne(1L)); user.setRoles(roles); userDao.save(user); } @Override public User findByUsername(String username) { return userDao.findByUsername(username); } }
  1. ¿Por qué el método de guardado está en la capa de servicio y no en la capa dao? Leí que todas las operaciones CRUD deberían ir en la capa dao.
  2. ¿Cuál es el propósito de findByUsername (String nombre de usuario) en UserServiceImpl? Podemos usar el método en dao, porque usamos Spring Data, por lo que Spring ya implementó esta funcionalidad.
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

  1. Leí que todas las operaciones CRUD deberían ir en la capa dao.

Tienes razón. userDao.save(user) : esto es CRUD. Pero establecer la contraseña y agregar los roles: es parte de la lógica comercial. La capa DAO no debe saber nada sobre la lógica empresarial. En este caso, la capa dao solo debe tomar al user preparado y guardarlo en db. Eso es todo.

  1. ¿Cuál es el propósito de findByUsername(String nombre de usuario) en UserServiceImpl

Por la misma razón, findByUsername (String username) está en el Servicio. Ahora no pasa nada y solo se llama a un método desde el DAO. Pero de repente será necesario agregar algo de lógica antes de llamar al método desde el DAO.

over 4 years ago · Santiago Trujillo Report

0

La mayoría de los tutoriales para principiantes en la red muestran los métodos de servicio como tontos y terminan simplemente delegando la operación de guardado a DAO llamando al método de guardado de DAO, como en su ejemplo del método save(). Pero en las aplicaciones del mundo real, al menos el 50% de las veces tendrá alguna lógica de negocios para escribir como

1) Validar que el usuario pueda realizar alguna acción. 2) Verifique una condición previa o posterior antes de la actualización de datos. 3) Asegúrese de que existan otros datos antes de guardar, etc.

Entonces, aunque el método Servicio puede parecer análogo al método DAO o Repositorio, siempre es útil seguir el flujo de trabajo Controlador->Servicio->DAO en lugar de Controlador->DAO para que agregar lógica comercial al Servicio sea útil en el futuro. Espero eso ayude.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!