Dva: Comment implémenter l'imbrication de modèles (modularisation)?

Créé le 17 févr. 2017  ·  14Commentaires  ·  Source: dvajs/dva

Il existe une forte demande de modularité,

S'il n'y a qu'un modèle de premier niveau, il peut y avoir de nombreux modèles, ce qui n'est pas propice à la modularisation

Vous ne savez pas comment réaliser la modularisation du modèle?

faq question

Commentaire le plus utile

Cette question est à peu près comprise, nous en avons discuté hier, elle porte principalement sur le sens du modèle, il y a deux tendances: suivre la vue et suivre l'entité commerciale.

Du point de vue de la conception actuelle, il devrait être plus approprié de suivre la vue, car l'état de chaque modèle est isolé et tout dans le modèle suit son propre état.De ce point de vue, il est en effet préférable de suivre la vue. Dans ce cas, la signification de modèle est le modèle de vue.

Mais de cette manière, ces ajouts, suppressions, effets de vérification et de modification commerciaux utilisés par le modèle peuvent exister dans chaque modèle utilisé, par exemple:

Il existe des vues ABC, entités commerciales XYZ, où:

A utilise CRUD de XY
B utilise le CRUD de YZ
C utilise le CRUD de XZ

Notre modèle est conçu pour suivre la vue ABC, et il doit y avoir des effets de redondance. Par exemple, Y existe dans AB en même temps, et il peut y avoir une redondance dans le code. D'un autre point de vue, l'utilisation de Y dans AB lui-même ne devrait pas considérer la réutilisation, et le processus appelant à réutiliser devrait être placé au niveau suivant, c'est-à-dire le service.

Ainsi, la structure organisationnelle devient:

  a
  b
  c
service
  x
  y
  z

Et la structure de modelA:

{
  effects: {
    *x() {
      yield call(serviceX);
    },
    *y() {
      yield call(serviceY);
    }
  }
}

La structure du modelB:

{
  effects: {
    *y() {
      yield call(serviceY);
    },
    *z() {
      yield call(serviceZ);
    }
  }
}

Plus tard, j'écrirai une démo plus orientée business et donnerai quelques suggestions pour l'utilisation de scénarios

Tous les 14 commentaires

Les affaires sont comme ça,
Par exemple, il existe 5 produits relativement indépendants dans l'application, et chaque produit a un modèle relativement indépendant.

Dans ce cas, une seule couche de modèle sera très exiguë

Bien sûr, il peut également être distingué sur l'espace de noms, mais actuellement, l'espace de noms sera directement utilisé comme nom d'état (les symboles spéciaux tels que . ne peuvent pas être utilisés)

Seule une seule couche de modèle sera très exiguë

Je n'ai pas compris

@ codage

En regardant le document, le modèle n'a physiquement qu'une seule couche. S'il y a un grand nombre de modèles, il y a probablement un conflit d'espace de noms avec le même nom (en particulier pour les grands projets, certains modèles ont la même sémantique). À cette fois, ils devront peut-être être sur l'espace de noms., Ajouter le préfixe de manière dominante comme distinction entre les modules.

Je voudrais donc demander s'il existe un meilleur schéma d'imbrication ou de modularisation des modèles?

Il n'est pas recommandé d'imbriquer trop profondément dans l'état. Si vous imbriquez toujours le modèle, ce sera plus compliqué. On sent qu'il y a un problème avec la conception.
Je ne comprends pas la question, pouvez-vous me donner une simple démo?

Cette question est à peu près comprise, nous en avons discuté hier, elle porte principalement sur le sens du modèle, il y a deux tendances: suivre la vue et suivre l'entité commerciale.

Du point de vue de la conception actuelle, il devrait être plus approprié de suivre la vue, car l'état de chaque modèle est isolé et tout dans le modèle suit son propre état.De ce point de vue, il est en effet préférable de suivre la vue. Dans ce cas, la signification de modèle est le modèle de vue.

Mais de cette manière, ces ajouts, suppressions, effets de vérification et de modification commerciaux utilisés par le modèle peuvent exister dans chaque modèle utilisé, par exemple:

Il existe des vues ABC, entités commerciales XYZ, où:

A utilise CRUD de XY
B utilise le CRUD de YZ
C utilise le CRUD de XZ

Notre modèle est conçu pour suivre la vue ABC, et il doit y avoir des effets de redondance. Par exemple, Y existe dans AB en même temps, et il peut y avoir une redondance dans le code. D'un autre point de vue, l'utilisation de Y dans AB lui-même ne devrait pas considérer la réutilisation, et le processus appelant à réutiliser devrait être placé au niveau suivant, c'est-à-dire le service.

Ainsi, la structure organisationnelle devient:

  a
  b
  c
service
  x
  y
  z

Et la structure de modelA:

{
  effects: {
    *x() {
      yield call(serviceX);
    },
    *y() {
      yield call(serviceY);
    }
  }
}

La structure du modelB:

{
  effects: {
    *y() {
      yield call(serviceY);
    },
    *z() {
      yield call(serviceZ);
    }
  }
}

Plus tard, j'écrirai une démo plus orientée business et donnerai quelques suggestions pour l'utilisation de scénarios

@xufei a besoin de conseils comme l'oncle

@xufei Pouvez-vous apprendre de votre démo?Je m'inquiète pour ça récemment

La démo

La démo

Je pense qu'il est plus raisonnable d'avoir à la fois un modèle d'entreprise et un modèle de vue. Par exemple, l'utilisateur actuel peut avoir un modèle d'utilisateur pour un traitement global.
Si d'autres composants impliquent des informations utilisateur actuelles, connectez-vous directement au modèle utilisateur.Cela dépend des besoins de l'entreprise

@ liSong5713 La liste des utilisateurs a cliqué dans la liste des détails de l'utilisateur, les détails de l'utilisateur ont cliqué dans la gestion des clés pour savoir si ceux-ci doivent être placés dans le même modèle d'utilisateur

@lwbGH Cela dépend de vos responsabilités en matière de modèle. Le modèle utilisateur peut être les informations de base et couramment utilisées de l'utilisateur actuellement connecté. Si vous souhaitez modifier les informations détaillées de l'utilisateur, telles que le journal des opérations de l'utilisateur, ces informations peuvent être complètement différent du modèle. Je pense que la division du modèle réside dans un peu:
Le degré de partage de l'état des composants de niveau , si une page simple correspond à un modèle au niveau de la page, ce sera compliqué

Bien sûr, il peut également être distingué sur l'espace de noms, mais actuellement, l'espace de noms sera directement utilisé comme nom d'état (les symboles spéciaux tels que . ne peuvent pas être utilisés)
. Ne ​​peut pas être utilisé comme clé, vous pouvez utiliser _. Actuellement, nous sommes contraints dans l'espace de noms. Les modèles peuvent être divisés en modules par vue et métier, mais l'espace de noms est contraint par "nom_fichier_dossier".
image

Cette page vous a été utile?
0 / 5 - 0 notes