Programming-[Backend]/SpringBoot

[TIL][중요]Entity의 필드값 변경은 Service가 아닌 Entity에서 처리

컴퓨터 탐험가 찰리 2021. 8. 26. 10:48
728x90
반응형

 

Entity의 필드값 변경은 Service 코드 내에서가 아니라 Entity 코드 내에 작성하는 것이 좋다. 왜냐하면 어떤 Entity를 여러 서비스에서 사용할 수 있기 때문이다.

 

예를들어, 다음과 같은 1: N 연관관계를 갖는 엔티티가 있다고 가정하자. General 엔티티에 Soldier 엔티티가 1 : N으로 연결되어 있다. 서비스코드에서 파라미터로 받아온 dto의 값들을 general 엔티티 내부의 soldier 엔티티의 필드값으로 Set하는 addSoldiers 메서드는, 서비스 코드에서 작성하는 것이 아니라 Entity 코드에서 작성한다.

 

이렇게 하면 makeArmyServiceImpl 코드에서 뿐만 아니라, 다른 Service 코드에서도 addSoldiers 메서드를 활용할 수 있게 된다. 그리고, 다른 패키지에있는 다른 Service에서 makeArmyServiceImpl이 포함된 파일을 참조하지 않으므로 독립성도 유지할 수 있게 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//엔티티 코드
@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "general")
public class GeneralEntity {
  //엔티티 관계 설정
  @OneToMany(fetch=FetchType.LAZY, mappedBy="general")
  private List<SoliderEntity> soldiersEntity;
 
  //setGeneralEntity
  public addSoldiers(dto) {
    List<SoliderEntity> soldiers = this.soldiersEntity;  //서비스 코드에서 기준잡은 generalEntity가 this
    for(SoliderEntity soldier : soldiers) {
      soldier.setName(dto.soldierName)
      soldier.setWeapon(dto.weapon)
      ...
    }
}
 
 
//서비스 코드
@Overried
@Transactional
public makeArmyServiceImpl(GeneralEntity generalEntity) {
  generalEntity.addSoliers(dto);
  ...
}
cs

 

728x90
반응형