회고

20220722 TIL #리패키징 #전략패턴

paran21 2022. 7. 22. 20:53

계속 미루고 미루던 리패키징을 했다.

처음에 패키징 구조를 제대로 정하지 않고 시작하다 보니 패키지가 같은 뎁스에 계속 추가만 되고 있었다.

또 중간중간에 기획이 계속 바뀌다 보니 동일한 뎁스에 있어도 될 것 같은 패키지가 흩어져 있는 것도 있었다.

계층구조로 구분할 건 구분하고, 필요한 건 가까워질 수 있도록 수정하였다.

네이밍과 api 계층도 일부 수정했다.

 

당장 기능 구현해야되는 것도 있어서 다 수정하지는 못했지만, 크게 패키지 구조는 정리가 되서 틈틈히 더 수정하면 될 것 같다.

 

이와중에 main만 패키지 구조가 변경되고 test는 변경이 안되서......

도와주는 플러그인이 있다고 하는데 왜 변경이 안됬을까??

당연히 test도 변경이 됬다고 생각하고 확인을 안했는데 나중에 다시 살펴보니 하나도 되어있지 않아서 결국 수작업으로 했다ㅜㅜ 분명 인텔리제이가 도와줄 수 있는 방법이 있을텐데!!!

거기다 중간에 좀 꼬였는지, 빈 폴더가 생기고, import경로가 제대로 인식이 안되서 중간에 한번 그냥 롤백했다.

queryDSL도 사용하고 있기 때문에 해당하는 Q~ 클래스들이 잘 생성되고, 경로도 잘 인식되게 중간중간에 build를 다시 했다.

 

 


동일한 기능을 하는데, vendor가 달라서 최소한 서비스부터는 다른 구현체를 써야하는 부분을 작업하고 있다.

프론트에서는 하나의 html을 사용하고 있고, 컨트롤러와 서비스가 분리되면 좋을 것 같아서 전략 패턴을 참고해서 진행하고 있다.

 

우선, 필요한 기능을 하는 인터페이스는 하나를 만들고 vendor에 따라 이 인터페이스를 구현하는 구현체 service들을 만들었다.

Dto는 아직 작업하지 않았는데, 상속을 이용하면 될 것 같다.

 

컨트롤러에서는 프론트에서 param으로 받은 vendor를 가지고 적절한 구현체를 찾는데

우선 컨트롤러에 해당하는 인터페이스를 List<Interface>로 주입하고, 인터페이스 안에 해당 vendor를 반환하는 메서드를 만들어서 일치하는 구현체를 찾아오게 하였다.

뭔가 더 좋은 방법이 있을 것 같은데 잘 모르겠다...일단 기능 구현하고, 더 찾아봐야겠다!

 

일단 이렇게 하면 컨트롤러에서는 동일한 api로 모든 vendor들을 구현할 수 있어서 좋은 것 같다.

또, 컨트롤러와 서비스 사이에 인터페이스로 분리하였기 때문에, 이후에 로직을 수정하게 되어도 구현체만 수정하면 될 것 같다!