Question

Mon équipe commence la mise en œuvre d'une application entièrement nouvelle, avec une exigence de la multi-location. Je fais une grande quantité de recherche sur les modèles pour l'évolutivité simple, en particulier sur l'infrastructure en nuage distribué, et CQRS semble être le mot à la mode du jour (allant jusqu'à être appelé « Crack pour l'architecture Addicts » que je trouve assez drôle ). Avantages et les pièges mis à part, il est assez difficile de trouver quelqu'un d'autre que Greg Young qui a utilisé cette idée largement (ou pas du tout) dans les applications de production et peuvent fournir des conseils dans le monde réel pour elle.

Alors, voici mes questions: 1. Est-ce une architecture CQRS adapter votre application multi-locataire typique, ou est-il mieux adapté à plus grande échelle des applications d'entreprise interne. 2. Si vous recommandez qu'il est utilisé dans cette situation, peut vous fournir des conseils sur les approches de-les-tranchées - en particulier sur les choses pour obtenir le droit dès le début, et quels aspects doivent être évolué de façon organique. 3. Si quelqu'un a essayé et trouvé trop difficile ou non pris conscience des avantages ou des arguments solides contre (et recommander coller à CRUD et la conception à plusieurs niveaux), je voudrais savoir sur ces expériences aussi bien.

Pour référence, la demande sera rédigée dans .NET, et l'extrémité avant sera d'abord basé sur le Web (ASP.NET MVC), ce qui pourrait être étendu aux clients mobiles et épais. Concurrency, l'activité transactionnelle, et le volume de données sont tous devraient rester relativement faible pendant toute la durée de vie de l'application (par rapport à un volume élevé des applications financières et autres). Pour les infrastructures, nous prévoyons utiliser Azure.

Était-ce utile?

La solution

Je l'ai examiné le même point de départ moi-même, dans une perspective d'exploration avant de se lancer dans le projet actuel (nous attendons toujours le financement des entreprises). En cela, mes recherches et d'opinion est formé à partir de ce que l'axe mutualisée de l'architecture est en grande partie orthogonale à l'utilisation de CQRS pour la conception interne d'un service à gros grains. Les lieux d'exigence à locataires multiples contraintes globales supplémentaires autour de la façon dont l'application des locataires d'ségrège une sécurité, des données, présentation / personnalisation, le déploiement / d'approvisionnement et de point de vue de l'évolutivité. CQRS ne fait pas vraiment ce mieux ou pire et à mon avis, a encore de la valeur pour relever les défis architecturaux précieux pour les services. Cela dit, tous les services qui collaborent pour fournir vaguement la nécessité de l'application pour suivre le modèle CQRS soit, à condition que l'architecture choisie ne couplage lâche prohibe pas.

Autres conseils

  1. Multi-location va changer un peu CQRS côté lecture. Vous aurez besoin de vues de filtre et retour des données liés aux locataires seulement. Et vous les mêmes problèmes en utilisant toute autre architecture.
  2. Je recommande CQRS, car il fera votre demande une tâche en fonction (pas un CRUD basé). Cela signifie que vous aurez reçu des commandes de l'interface utilisateur et ils seront plus significatifs que DTO. Si vous voulez écrire votre noyau avec les principes DDD essayez d'éviter Anemic modèle de domaine ( http://martinfowler.com /bliki/AnemicDomainModel.html ). Approche de le faire - déplacer toute logique spécifique au domaine des objets de domaine. Vos gestionnaires de commandes doivent être très simples (Authentifier, charge racine globale, traduire objet de commande à la méthode appel, si aucune exception n'a été jetés - appliquer les modifications). Il vaut la peine de regarder le dossier de classe de Greg (6 heures et demi): http://cqrsinfo.com/video/ Comme Michael Shimmins dit, si vous prévoyez d'utiliser Azure comme votre plate-forme - il vaut la peine de regarder projet Lokad.CQRS. Je l'ai utilisé pour mettre en œuvre l'un de nos projets.
  3. CQRS ne rentre pas dans si vous avez vraiment besoin application simple CRUD (non axées sur les tâches). CQRS nécessitent plus de temps pour comprendre les principes de elle pour les nouveaux arrivants. De l'autre côté, il permettra de tâches distinctes dev entre les programmeurs domaine-core et vue- moins expérimentés> dto-> ui programmeurs.

Je ne pense pas mutualisée est plus dur / plus facile en utilisant CQRS. Vous avez plusieurs avantages si vous utilisez la messagerie: vous pouvez intégrer l'identification des locataires dans les commandes et les événements sous forme de données d'en-tête, sélectionnez une EventStore basée sur l'identification, combiner plusieurs locataires avec plusieurs instances. Pourtant, demandez-vous si votre domaine est hautement collaboratif et un expert de domaine à votre disposition ... sinon vous vous retrouvez avec commande / événement rumine; -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top