J'essaie de comprendre comment la structure de l'entreprise d'application avec Node/Express/Mongo (en fait, l'aide MOYENNE de la pile).
Après la lecture de 2 livres et quelques recherches sur google (y compris semblable StackOverflow questions), je ne pouvais pas trouver tout bon exemple de structuration de grandes applications à l'aide de l'Express. Toutes les sources que j'ai lu suggèrent de fractionnement de l'application par les entités suivantes:
- itinéraires
- les contrôleurs de
- modèles
Mais le principal problème que je vois avec cette structure est que les contrôleurs sont comme dieu objets, ils connaît req
, res
objets, responsable de la validation et avoir une logique d'entreprise inclus dans.
À l'autre côté, les routes me semble que le génie car tout ce qu'il fait est la cartographie des points de terminaison(chemins d'accès) à contrôleur de méthodes.
J'ai Scala/Java arrière-plan, donc j'ai l'habitude de séparer la logique en 3 niveaux - contrôleur/service/dao.
Pour moi énoncés suivants sont idéales:
Les contrôleurs ne sont responsables que pour l'interaction avec la partie WEB, c'est à dire marshalling/unmarshalling, une simple validation (obligatoire, min, max, e-mail regex etc);
La couche de Service (qui, en fait, j'ai raté en NodeJS/Express apps) est responsable uniquement de la logique d'entreprise, certaines entreprises de validation. La couche de Service ne sais rien à propos de WEB (par exemple, ils peuvent être appelés à partir d'un autre lieu de l'application, non seulement du contexte web);
Quant à la couche DAO est clair du tout pour moi. Mangouste modèles sont en fait des DAO, donc le plus clair chose pour moi ici.
Je pense que les exemples que j'ai vu sont très simple, et il affiche uniquement les concepts de Node/Express, mais j'ai envie de regarder quelques-l'exemple du monde réel, avec une grande partie de la logique métier/validation.
EDIT:
Une autre chose n'est pas clair pour moi est absent de la DTO des objets. Considérons cet exemple:
const mongoose = require('mongoose');
const Article = mongoose.model('Article');
exports.create = function(req, res) {
// Create a new article object
const article = new Article(req.body);
// saving article and other code
}
Il y a bien un objet JSON à partir d' req.body
est passé comme paramètre pour la création de Mongo document. Ça sent mauvais pour moi. Je voudrais travailler avec les classes de béton, pas de la matière première JSON
Merci.