Домен против действия Vuex в модели DDD - PullRequest
0 голосов
/ 16 марта 2020

Я работаю над проектом Vue, и он становится больше, поэтому я переписываю весь проект и применяю архитектуру, аналогичную приведенной ниже, MVVM и DDD.

  1. Уровень пользовательского интерфейса (MVVM ViewModel = vue / Model = Vuex)
  2. Уровень домена
  3. Уровень сервера (Firebase)

но мне интересно как использовать действие Vuex в архитектуре

В этой ссылке 3. Используйте действия для выполнения вызовов API и фиксации данных , действие vuex должно отвечать за API, но я думаю, что это не лучшее решение, потому что эти пункты.

  1. У нас есть огромные списки действий, если мы записывать каждую логику c в действии Vuex.
  2. Если эти логики (методы) не должны фиксировать какие-либо состояния (например, checkCV C для проверки cv c и возвращать только true / false результат ), почему я должен написать как действие Vuex.
  3. , куда писать доменную логи c? Все в действии?

Поэтому я пишу доменную логи c без действий и фиксирую состояние (если необходимо) внутри него.

[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 в качестве логики домена c, как согласовать vuex и doamin logi c.

Приветствую каждое ваше мнение, спасибо!

...