JAVA-JIKIMI / JPA

jpa 완벽 뽀개기
0 stars 0 forks source link

[핵심 pick] 8주차 정인철 #53

Open Incheol-Jung opened 2 years ago

Incheol-Jung commented 2 years ago

수정할 경우, Repository의 save 메소드는 주의해야 한다.

이름을 수정하는 테스트 코드를 구현해보자

// 테스트 코드
@Test
void updateName() {
    // given
    int id = 1;
    String address = "광주시";

    // when
    personService.updateName(id, address);

    // then
}

// 출력 로그 중 일부 발췌
2022-02-27 15:40:46.346  INFO 66362 --- [    Test worker] p6spy                                    : #1645944046346 | took 1ms | statement | connection 3| url jdbc:h2:tcp://localhost/~/jpashop
update person set address=?, name=? where id=?
update person set address='광주시', name=NULL where id=1;
2022-02-27 15:40:46.349  INFO 66362 --- [    Test worker] p6spy

엔티티 생명주기를 이해해야 한다.

1111

https://ultrakain.gitbooks.io/jpa/content/chapter3/chapter3.3.html

update 로직은 어디에서 하는게 좋은가?

서비스에 구현하기

Entity에 구현하기

어느 코드가 더 적절하다고 생각하는가?

다음과 같은 요구사항을 추가해보자

서비스 레이어에 모든 구현 로직을 구현하는데에는 한계가 있다.

가독성이 어떻게 안좋아질 수 있을까?

// Person Service
public class PersonService {
    private final PersonRepository personRepository;

    @Transactional
    public void updatePerson(int person_id, String name, String address, int age) {
            Person person = personRepository.findbyId(person_id); // Optional로 예외처리해야 하지만 현재 로직에선 생략하겠습니다.
            person.setName(name);
            person.setAge(age);

            ~~~~~
            // 추가 요구사항 구현 (구현 로직 50라인 이상)
            // - 미성년자는 나이를 변경할 수 없다.
            // - 성이 ‘정'일 경우, 주소를 변경할 수 없다.
            // - 사용자 정보를 수정하게 되면 이메일을 발송한다.
            // - 사용자 정보를 수정하게 되면 주문 서비스의 주문 정보도 수정해야 한다.
            // - 사용자 정보를 수정하게 되면 알림 서비스의 수신자 정보도 수정해야 한다.
            ~~~~~           

            searchParam param = createSearchParam(address);
            String findAddress = addressService.findAddress(param);
            person.setAddress(findAddress);
    }
}
Incheol-Jung commented 2 years ago

https://www.inflearn.com/questions/70393