너무 늙었나....이해안되는 코드 해석좀 부탁드립니다 ㅠ
알림
|
페이지 정보
작성일
2024.05.24 14:16
본문
안녕하세요
어쩌다보니 IT쪽에서 10년넘게 밥벌어 먹고 살고 있는 관리잡니다 ㅎㅎ
1년전쯤 이직을 해서 팀장으로 지내고 있는데
최근 일손이 부족해 저도 코딩에 손을 얹게 되었고 자연스레 레거시 코드를 보게 됐는데요
아무리봐도 이해가 안되는 부분이 있어 혹시나 가르침을 받을 수 있을까 해서 여쭤봅니다
일단 언어는 자바구요
스프링 부트로 올라가는 api 서버 입니다
A라는 모델클래스가 있는데 여기에 갑자기 update라는 메소드가 보였고 내용을 보니…
@Transactional
public SomeObject update(SomeObjectUpdateRequest dto) throws IOException {
// 상황에 따라 변수의 값을 변경시키는 비즈니스 로직
this.someVar = dto.getSomeVar();
…
return new SomeObject(BeanContext.get(SomeObjectRepository.class).save(this.toEntity()));
}
이런 모양입니다
제 기준으로는 모델클래스 안에서 레파지토리를 끄집어내서 save를 날린다는게 이해가 안되는데
이게 일반적인 코딩 형태라고 볼 수 있는 건가요?
혹시 제가 모르는 어떤 아키텍쳐나 최근 유행하고 있는 뭔가가 있는 건지 아시는분 설명좀 해주시면 감사하겠습니다 ㅠ
이것때문에 일을 못하고 있어요 ㅎㅎ;;
댓글 12
이게뭐야님의 댓글의 댓글
@포비포비님에게 답글
포비포비님//
제게 익숙한 코드도 딱 말씀하신 형태인데 그것도 서비스 클래스에 있는 ...
저게 모델 클래스 안에 있어서 당황스러웠습니다
/Vollago
제게 익숙한 코드도 딱 말씀하신 형태인데 그것도 서비스 클래스에 있는 ...
저게 모델 클래스 안에 있어서 당황스러웠습니다
/Vollago
나니님의 댓글
몇번의 이직을 거치면서 이런 저런 소스들을 접하다보면..
성능에 엄청난 손실을 미치는게 아니라면
무조건 소스는 읽기 쉽게(이해하기 쉽게) 짜는것이 최고더라구요
(아니면 주석이라도 제대로 달아놓던지..)
/Vollago
성능에 엄청난 손실을 미치는게 아니라면
무조건 소스는 읽기 쉽게(이해하기 쉽게) 짜는것이 최고더라구요
(아니면 주석이라도 제대로 달아놓던지..)
/Vollago
이게뭐야님의 댓글의 댓글
@나니님에게 답글
맞습니다
협업의 관점에서 그 부분이 최우선이지요
그래서 더더욱 저 코드가 이해 안됩니다
다른 소스들은 서비스 클래스를 통해서 레파지토리로 쿼리를 날리고 있거든요 ㅎㅎ
협업의 관점에서 그 부분이 최우선이지요
그래서 더더욱 저 코드가 이해 안됩니다
다른 소스들은 서비스 클래스를 통해서 레파지토리로 쿼리를 날리고 있거든요 ㅎㅎ
ISLER님의 댓글
스프링 매우 초창기 코드가 아닐까 싶네요. 빈 꺼내오는것도 그렇고.. 커밋 로그 쫓아가보면 왠지 datasource가 분리된 환경이 아니였을까 싶은…
이게뭐야님의 댓글의 댓글
@ISLER님에게 답글
ISLER님//
이제 3년된 스타트업이고 저 코드를 짠 사람은 책임급 개발자 입니다
놀랍게도 저 코드는 작년말에 작성이 됐습니다
ㅎㄷㄷㄷㄷ
/Vollago
이제 3년된 스타트업이고 저 코드를 짠 사람은 책임급 개발자 입니다
놀랍게도 저 코드는 작년말에 작성이 됐습니다
ㅎㄷㄷㄷㄷ
/Vollago
ISLER님의 댓글의 댓글
@이게뭐야님에게 답글
책임급이면.. 그럴수도 있을거같아요. 보통.. 새로운 뭔가가 나온다고 모든 사람들이 다 받아들이는게 아니니까요.. 자기가 아는게 일단 돌아가니 새로운건 안받아들이거나 시간이 없어서 못받아들이는 경우가 대다수니까요..
이게뭐야님의 댓글의 댓글
@ISLER님에게 답글
ISLER님// 듣고보니 그럴수도 있겠네요
감사합니다~
/Vollago
감사합니다~
/Vollago
ouze님의 댓글
DDD (Domain Driven Design) 가 아닌가 합니다. 최근 golang으로 msa를 구현한 소스가 저런형식이었거든요.
근데 전체가 msa면 모를까 다른 소스는 데이터 주도 패턴이었다면 좀 이상하네요.
근데 전체가 msa면 모를까 다른 소스는 데이터 주도 패턴이었다면 좀 이상하네요.
이게뭐야님의 댓글의 댓글
@ouze님에게 답글
ouze님// DDD였나 보군요ㅎㄷ
자료를 찾아봐야 겠습니다
감사합니다
/Vollago
자료를 찾아봐야 겠습니다
감사합니다
/Vollago
쌍둥이달님의 댓글의 댓글
@이게뭐야님에게 답글
일반적인 MVC의 개념으로는 서비스 레이어의 코드가 모델에 있는 부분이 DDD에 기반한 코드로 생각 됩니다.
야근의요정님의 댓글
지나가던 개발자입니다. 올려주신 소스의 마지막 내용이 핵심이고 결국 빈주입을 컨텍스트로 직접 호출하는 고리짝시대 코딩방식입니다. 빈 주입하는걸 @resource나 @inject 아니면 @autowired로 repository 클래스나 인터페이스 선언한 놈 들고 오면 되는건데 저걸 저렇게 해놨네용...
orm은 spring data jpa로 선언한것 같은데 혼란스럽네요.
레거시와 신기술의 위아더월드 네이쳐도 아니고...
orm은 spring data jpa로 선언한것 같은데 혼란스럽네요.
레거시와 신기술의 위아더월드 네이쳐도 아니고...
포비포비님의 댓글
보통은 아래처럼 작성하는 것이 일반적인 것 같습니다.
@Transactional
public SomeObject update(SomeObjectUpdateRequest dto) throws IOException {
// 비즈니스 로직
this.someVar = dto.getSomeVar();
// 엔티티 변환 및 저장
SomeEntity entity = this.toEntity();
SomeEntity savedEntity = someObjectRepository.save(entity);
// 저장된 엔티티를 기반으로 SomeObject 생성
return new SomeObject(savedEntity);
}