programing

DDD 모델의 도메인 대 Vuex 작업

copysource 2022. 7. 10. 11:05
반응형

DDD 모델의 도메인 대 Vuex 작업

Vue 프로젝트를 진행하고 있는데 점점 더 커지고 있어서 프로젝트 전체를 다시 쓰고 아래와 같은 아키텍처로 MVVM과 DDD를 적용합니다.

  1. UI 계층(MVVM ViewModel=vue/Model=Vuex)
  2. 도메인 레이어
  3. 서버층(파이어베이스)

하지만 Vuex action을 어떻게 건축에 사용할지 궁금합니다.

참조문헌에서는 3. Actions to Make API Calls and Commit the Data , vuex actions는 api를 담당해야 하지만 이러한 점들이 있기 때문에 최적의 솔루션은 아니라고 생각합니다.

  1. Vuex 액션에 모든 논리를 쓴다면 엄청난 액션 리스트가 있습니다.
  2. 이러한 로직(메서드)이 어떤 상태도 커밋할 필요가 없는 경우(예를 들어 CVC에서 cvc를 체크하고 true/false 결과만 반환) Vuex 액션으로 써야 하는 이유.
  3. 도메인 로직을 어디에 써야 합니까?모두 활동 중?

따라서 작업 없이 도메인 로직을 작성하고 필요에 따라 그 안에서 상태를 커밋합니다.

[domain/talks.ts]
export const getTalk = (uid: string, talkTo: string,) => {
 const server = new Talks(uid)
 server.getTalks(talkTo).subscribe(talk => {
   store.commit('profile/talks/updateTalk', {to: talkTo, talk: talk})
  })
}

좋은 것 같지만 Vue 컴포넌트에서는 이 접근법이 채택되지 않았습니다.

[Talk.vue]
<template lang="pug">
     //display chat list
     ul
       li.list(v-for="message in talk" :key="message.id") {{message}}
</template>

<script lang="ts">
import store from "@/model/vuex/talk.ts"   
import {getTalk} from "@/domain/talk.ts"  

@Component
export default class Talk extends Vue{

  subscription?:Subscription

  get talks(){
    return store.talks
  }

  created():void{
    this.subscription = getTalk() // <- **here commit talk state implicitly**
  }

  destroy():void{
   this.subscription.unsubscribe()
  }
}
....

이 컴포넌트는 단순히 통화 데이터를 가져오고 대화 목록을 표시합니다.단, 이 컴포넌트는 getTalk 메서드의 기능을 알고 있어야 합니다(컴포넌트는 이 메서드의 커밋 상태를 암묵적으로 알고 있어야 합니다).

따라서 Vuex 액션을 도메인 로직으로 사용하는 것이 좋은지, Vuex 로직과 doamin 로직을 조화시키는 방법이 무엇인지 묻고 싶습니다.

당신의 모든 의견을 환영합니다, 감사합니다!

언급URL : https://stackoverflow.com/questions/60710189/domain-vs-vuex-action-in-ddd-model

반응형