최근에 리팩토링을 진행하면서 Vuex-ORM을 사용해봤다. 좋다. 추천해본다.
장점
- 별 수고없이(생각없이) Immutability를 높인다.
- Nested된 데이터를 다룰 때 매우 좋다.
- Query를 유연하게 짤 수 있다.
- 작성자 -> 게시글 -> 댓글 -> 대댓글을 JOIN으로 불러오면서 각 단계에서 orderBy를 다르게 먹일 수 있다.
- 어려움 없이 JSON object를 Vuex-ORM에 로딩할 수 있다.
- Vuex getter의 부족함을 많이 메꿔준다. getter를 getter에서 호출하지 못한다는 점이라든가…
- 근본 넘치는 TypeScript로 작성되어 있다. (?)
단점
this.number()
,this.string()
과 같은 형식으로 속성을 선언하게 되면, null 값이 들어갔을 때 전자는 0으로, 후자는 “null”의 값이 들어간다. 따라서, 타입이 없는this.attr()
를 주로 사용하게 되는 것 같다. 타이핑이 살짝 부족한게 단점- 복잡하지 않은 데이터를 다루는 프로젝트의 경우 오버엔지니어링으로 보인다.
- vuex는 불변성을 강조하지 않는 프레임워크기 때문에, 찾아낸 객체에 직접 변형을 가하는 경우가 많은데, 그런 코드가 많으면 많을 수록 Vuex-ORM으로 넘어가기 힘들다.
개인적으로 장점이 단점보다 매우 크다고 생각하기에 이 라이브러리를 추천한다. 뱀발로, vuex-orm의 플러그인 중 하나인 vuex-orm axios는 생각보다 별로다. vuex-orm으로 가져온 객체 x
에 대해서 save() 함수나 delete() 함수를 호출했을 때 REST API를 호출하는 것이 아니라는 것에서 충격.