작성
·
319
·
수정됨
1
안녕하세요. 강의 너무 잘 듣고 있습니다.
섹션2의 '스프링에서 OOP와 안티패턴 : Transactiojn script' 회차를 듣던 중 10분 42초 부분에서 ProductService 코드를 리팩토링하고 싶다고 말씀해주셨는데 어떤 부분에서 리팩토링 하고 싶으신건지 궁금합니다!! 제 부족한 지식으론 딱히 건드릴게 보이질 않아서요 ㅠㅠ
※ 3년차 개발자이지만 회사 내 사수가 없어 좌절하고 있던 시기에 우근님의 강의를 듣는 순간 가뭄의 단비와 같으며 세상에서 가장 달콤한 술을 먹은 것 마냥 취하게 해주셔서 감사합니다..
답변 2
1
안녕하세요. 답변이 늦어 죄송합니다. AI가 대신 답변을 달아줬지만, 강의를 잘 들어주셨다니 저도 기쁩니다.
근래에 출판사로부터 좋은 제의를 받아 집필하느라 정신이 없었습니다. 이미 답에 대한 해답을 얻으셨을 수도 있고 아니었을 수도 있겠네요. 근 2달이 다 되어 가는 질문이라 면목이 없네요.
강의 이상의 추가적인 리팩토링을 하는 것에 대해서는 지나치게 개인적인 견해라서 차라리 넣지 않는 게 낫겠다고 생각했었습니다. 그래서 강의에 넣지 않았었고요. 따라서 아래는 그냥 참고만 해주시면 감사하겠습니다.
CQRS를 적용할 것 같습니다. Repository를 Writer와 Reader로 분리하고 도메인도 ModelReadonly와 ModelEditable로 분리하거나, User 모델은 Readonly로 두고 User 모델에 변경을 요청하기 위한 UserUpdateCommand 같은 모델을 만들 것 같습니다.
Price를 도메인으로 분리할 것 같습니다. 실제로 e커머스 애플리케이션을 개발하는 예시를 찾아보면 Money 같은 정보를 모델을 분리하는 예시를 자주 볼 수 있습니다. 이는 가격이라는 모델이 논리적 응집도에 의해 행동(메서드)을 갖춰야 하는 경우가 상당히 자주 생기기 때문입니다. ex. https://github.com/madvirus/ddd-start/blob/master/src/main/java/com/myshop/common/model/Money.java
하다못해 Price는 BigDecimal, BigInt, long 같은 타입이어야 합니다. 이는 PPT를 다 만들고 나서야 아차 싶었습니다. int는 가격을 표기하기에 너무 작은 값입니다. 😭
ProductService의 이름도 영 별로라는 생각입니다. 예시에서는 맥락이 없으니 어쩔 수 없이 이러한 코드를 만들어 설명했지만, 가격을 계산하는 기능은 ‘상품을 주문한다’에 초점을 맞추어 접근하는게 더 나을 것 같습니다. Order라는 새로운 모델의 필요성을 이야기 하는 겁니다.
부족하지만 답변이 되었으면 합니다. 다 적고 보니 강의에서 괜한 말을 했구나 싶기도 하네요. 제가 너무 늦게 답변을 달아 언제 이 답변을 보실지는 모르겠습니다. 보시는 그날, 좋은 하루 되시길 바랍니다. :)
-2
안녕하세요, 인프런 AI 인턴이에요.
강의를 잘 들으셨다니 기쁩니다. 강의에서 ProductService 부분에서 리팩토링을 언급한 부분은 강의 내용과 함께 참고하셔야 할 것 같습니다.
제가 추측해본다면, ProductService에서 비즈니스 로직과 프레젠테이션 로직이 섞여있는 현재 코드를 더욱 깔끔하고 가독성 높은 코드로 개선하는 리팩토링을 생각하시는 것 같습니다. 비즈니스 로직과 프레젠테이션 로직을 분리하는 방법을 고민하시면 될 것 같아요.
더욱 자세한 내용이 궁금하시다면, 이와 관련된 Spring Framework 공식 문서나 관련 서적들을 참고해보시면 도움이 될 것입니다.
궁금하신 점이나 더 자세한 질문이 있다면 언제든지 댓글로 문의해 주세요. 좋은 하루 보내세요 :)
바쁘신데 답변달아주셔서 감사합니다 ㅠㅠㅠㅠㅠ 테스트 강의도 잘듣고있습니다 복받으세요!!