on
Refactoring 일지 2. 중복 코드 제거
Refactoring 일지 2. 중복 코드 제거
class NoteViewSet(CtrlfAutentication, ModelViewset): # list(), retrieve() 등 일부 코드 생략 @swagger_auto_schema(**SWAGGER_NOTE_CREATE_VIEW) def create(self, request, *args, **kwargs): ctrlf_user = self._ctrlf_authentication(request) note_data, issue_data = self.build_data(request, ctrlf_user) ... return Response(status=status.HTTP_201_CREATED) def build_data(self, request, ctrlf_user): note_data = { "title": request.data["title"], "owners": [ctrlf_user.id], } issue_data = { "owner": ctrlf_user.id, "title": request.data["title"], "reason": request.data["reason"], "status": CtrlfIssueStatus.REQUESTED, "related_model_type": CtrlfContentType.NOTE, "action": CtrlfActionType.CREATE, } return note_data, issue_data class TopicViewSet(CtrlfAutentication, ModelViewset): # list(), retrieve() 등 일부 코드 생략 @swagger_auto_schema(**SWAGGER_TOPIC_CREATE_VIEW) def create(self, request, *args, **kwargs): ctrlf_user = self._ctrlf_authentication(request) topic_data, issue_data = self.build_data(request, ctrlf_user) ... return Response(status=status.HTTP_201_CREATED) def build_data(self, request, ctrlf_user): topic_data = { "title": request.data["title"], "owners": [ctrlf_user.id], "note": request.data["note_id"] } issue_data = { "owner": ctrlf_user.id, "title": request.data["title"], "reason": request.data["reason"], "status": CtrlfIssueStatus.REQUESTED, "related_model_type": CtrlfContentType.TOPIC, "action": CtrlfActionType.CREATE, } return topic_data, issue_data class PageViewSet(CtrlfAutentication, ModelViewset): # list(), retrieve() 등 일부 코드 생략 @swagger_auto_schema(**SWAGGER_PAGE_CREATE_VIEW) def create(self, request, *args, **kwargs): ctrlf_user = self._ctrlf_authentication(request) page_data, issue_data = self.build_data(request, ctrlf_user) ... return Response(status=status.HTTP_201_CREATED) def build_data(self, request, ctrlf_user): page_data = { "title": request.data["title"], "owners": [ctrlf_user.id], "topic": request.data["topic_id"], "content": request.data["content"], } issue_data = { "owner": ctrlf_user.id, "title": request.data["title"], "reason": request.data["reason"], "status": CtrlfIssueStatus.REQUESTED, "related_model_type": CtrlfContentType.PAGE, "action": CtrlfActionType.CREATE, } return page_data, issue_data
build_data() 메소드가 note, topic, page에 따라 조금씩 다르지만 중복되는 부분이 분명히 있다.
이를 하나의 메소드로 추출하고, note, topic, page에 따라 data가 다르게 만들어지도록 분기처리하면 중복코드가 없어진다. 메소드를 추출하자
from http://jino-dev-diary.tistory.com/40 by ccl(A) rewrite - 2021-12-15 18:26:51