Février 2016

Volume 31, numéro 2

Cet article a fait l'objet d'une traduction automatique.

À la pointe - Dérivés d’architecture d’UXDD

Par Dino Esposito | Février 2016

Dino EspositoAnnées et je suis heureux de seulement si je sais et peut recommander un ou deux méthodes efficaces de faire les choses de logiciels plus. Trompeur l'importance de la commercialisation de logiciels. Le logiciel améliore en permanence, mais n'est pas l'activité principale de la plupart des entreprises. Cela signifie qu'il est plus acceptable pour les entreprises de continuer à utiliser les mêmes logiciels depuis de nombreuses années. En fonction de la Tiobe.com d'index, de l'été 2014, Visual Basic 6 a toujours dans le Top 10 des plus utilisés langages de programmation. Une année et une moitié par la suite, il supprimé quelques postes, toutefois. Cela semble confirmer la tendance la majorité silencieuse de sociétés ont tendance à reporter une réécriture complète des logiciels autant que possible. Dans la pratique, la majorité silencieuse de sociétés ont au moins un retard de cinq ans dans la technologie logicielle qui est en cours d'exécution dans leurs entreprises. Mais lorsqu'il est temps pour les entreprises de mettre à jour ces systèmes de file d'attente, aux architectes recherchera de pointe.

Architecture logicielle aujourd'hui

En ce qui concerne le logiciel architecture concerne, quelques mots clés s'agitent autour de nos jours. Une « CQRS », qui est l'acronyme de répartition de responsabilité de requêtes et commandes, et l'autre « persistance POLYGLOTTE. » J'ai abordées récemment CQRS dans une série d'articles de pointe. Pour une introduction, vous pouvez lire « CQRS pour l'Application courante » (msdn.com/magazine/mt147237) dans le numéro de juin 2015 de MSDN Magazine. CQRS est un guide architectural qui simplement recommande de que mettre distinct du code qui modifie l'état du système à partir du code qui lit et il signale. Largement persistance parlant, POLYGLOTTE fait référence à l'émergentes de l'utilisation de plusieurs technologies de persistance dans le contexte de la même couche d'accès aux données. L'expression, persistance POLYGLOTTE, résume dans deux mots les solutions techniques complexes adoptées par les réseaux sociaux pour gérer la quantité de données qu'ils ont à gérer tous les jours humongous. L'essence de persistance POLYGLOTTE est d'utiliser la technologie de persistance qui semble être idéal pour le type et la quantité de données.

CQRS et persistance POLYGLOTTE ont mérites notables et des avantages potentiels, il est parfois difficile de voir leur pertinence dans le contexte d'une application métier complexes que vous récupérez à partir des cendres de Visual Basic 6, Windows Forms ou Web Forms grand code base. Pourtant, pertinence existe et qu'il manque peut-être nuisible à long terme pour le projet et de l'entreprise. En même temps, l'architecture logicielle n'est pas un acte de foi. CQRS peut sembler être une excellente chose, mais vous devez connaître la perspective à droite pour voir cela dans votre scénario.

Si vous examinez l'architecture logicielle à travers l'objectif de UXDD, vous pouvez facilement trouver une solution adaptée pour CQRS et persistance POLYGLOTTE.

Conception basée sur les tâches

Formulaires de flux de travail UXDD sont déjà utilisés dans les entreprises de toutes tailles et j'ai vu personnellement des versions des petites équipes de moins de 10 employés, ainsi que dans les entreprises de plusieurs milliards de dollars. Dans ce cas une expérience utilisateur équipe est qui s'articule autour des écrans en collaboration avec les clients, internes ou externes. L'équipe de l'expérience utilisateur produit certains artefacts colorées sous la forme de fichiers PDF ou HTML et qui fournit à l'équipe de développement. Le problème est que la plupart du temps, que l'équipe de développement ignore ces artefacts jusqu'à ce que toute la pile back-end est conçue et créée. Trop souvent le back-end est conçu en prenant en compte peu ou pas les tâches effectuées au niveau de la présentation. En tant qu'architectes nous soigneusement prendre en charge les tâches de la logique métier et imaginer des moyens d'optimiser et de généraliser l'implémentation. En général, c'est suffisant sur les goulots d'étranglement et présentation des données non optimaux et navigation. Lorsque nous découvrir que les utilisateurs de l'expérience réelle passent par tandis que l'utilisation de l'application est loin d'être idéal, il est généralement trop tard pour implémenter les modifications de façon économique, comme indiqué dans Figure 1.

Visual Studio de bas en haut. Conception de haut en bas d'un système logiciel
Figure 1 vs de bas en haut. Conception de haut en bas d'un système logiciel

Admettons-le. Au-delà de son efficacité incontestée pour stocker des données, le modèle relationnel est trompeur pour l'architecture logicielle. Ou, au moins, son démarrage en cours sérieusement trompeuse après son 20 premières années de la vie. Déjà dans le milieu des années 1990 dans Java espace l'incompatibilité entre les modèles de données relationnelles et conceptuelles s'agissait de faits qui ont conduit à expérimenter les outils ORM. Générations des architectes de logiciels (désormais gestionnaires) ont été développés avec l'idée que tout cela est important est une base solide de la base de données. Sans aucun doute qu'une solide base de données est la base de tout logiciel solide. Le problème est la complexité et la quantité de logique de domaine et d'application. Il n'était pas un problème jusqu'à ce qu'elle était viable pour ajouter des parties de cette logique dans des procédures stockées. Au-delà de ce logiciel seuil architectes a évolué vers l'architecture de couche 3 classique (présentation, métier, données) et par la suite dans la conception pilotée par domaine (DDD) architecture en couches : présentation, application, domaine et infrastructure. Quel que soit le nombre de couches, la conception est essentiellement une conception de bas en haut.

La conception de bas en haut fonctionne parfaitement si au moins une des deux conditions suivantes est vérifiée :

  1. L'interface utilisateur idéal est très proche du modèle relationnel.
  2. Vos utilisateurs sont stupides et passif.

Conception de logiciels semble une science exacte lorsque vous regardez les didacticiels prêts à l'emploi pour promouvoir certaines nouvelles technologies intéressantes ou l'infrastructure. Lorsque vous quittez le laboratoire aseptique à transférer dans le monde réel, la conception des logiciels devient le règne de peur, vous avez un doute et incertitude : terres l'homme non où il existe une seule règle : Cela dépend.

UXDD suggère simplement ne pas commencer tout développement jusqu'à ce que vous avez une preuve évidente (lire : maquettes) de l'architecture des informations et l'interaction entre les utilisateurs et le système idéale idéale. Conception de haut en bas à partir de modèles filaires de la couche présentation garantit que vous obtenez vraiment proche de ce que les utilisateurs requis. Le risque d'entendre les mots mal intentionnées « this n'is pas ce que nous avons demandé » est considérablement réduit. N'oubliez pas que si un modèle filaire est signalée comme incorrecte, il n'est jamais une question de préférence ; Il est plus probable une question de l'entreprise. En ignorant les commentaires de maquettes est probablement créer délibérés bogues dans le système qui en résulte.

Figure 2 résume la différence d'impédance architecture aujourd'hui. Modèles filaires qui décrivent la couche de présentation idéale et nous avons le code qui implémente la logique métier, comme il a été compris. Malheureusement, le plus souvent à pas, les deux ne correspondent pas. Si les projets de logiciels rarement direct jusqu'à attentes — en particulier à partir d'un point de vue financier, vous êtes sûr qu'il n'est pas en raison de la différence d'impédance architecture ?

Architecture d'impédance
Figure 2 Architecture d'impédance

Architecture d'impédance d'adressage

Il s'avère qu'un modèle de domaine complet qui couvre la gamme complète de la logique de domaine n'est pas justifiée, afin qu'il soit un peu. L'idée de modèles de domaine et l'approche DDD, fournie pour s'attaquer à la complexité au coeur du logiciel, mais qui a plus de dix ans auparavant. A beaucoup changé depuis et lors de certains éléments centraux de conception pilotée par domaine, en particulier les concepts de conception stratégique et les outils — sont utiles plus que jamais aujourd'hui, un modèle de domaine orientée objet complète couvre tous les aspects de lecture / écriture de contextes délimités distinctes est difficile à créer et irréaliste.

En même temps, l'idée d'un modèle de domaine complet est aligné sur une vision de bas en haut du où vous comprenez qu'ils veulent, élaborer un modèle, le modèle de code et d'utiliser une interface utilisateur au-dessus de ce logiciel. Ouais comme vous pouvez le voir, réussi des logiciels sont une expérience agréable et efficace utilisateur sur une boîte noire magique (MBB).

Si vous démarrez un effort d'ingénierie de maquettes, vous savez exactement ce que le MBB doit prendre en charge efficacement. Et vous savez également que tant que le MBB fait son travail du système est vraiment proche de ce que les utilisateurs invités formellement pour. Aucun espace pour les hypothèses de développeurs et la plupart des itérations avec les clients est regroupée dans la phase initiale du projet. Toute modification est bon marchée et une fois les tests de l'expérience utilisateur se sont écoulé, la majeure partie de ce qu'il reste a la pertinence d'un détail d'implémentation.

UXDD met l'accent sur les tâches et les événements. Dans une conception de haut en bas, le point de départ est une action de l'utilisateur comme un clic ou d'une sélection. Chaque action de l'utilisateur est liée à un point d'entrée dans la couche application. Par exemple, dans ASP.NET MVC qui signifie que chaque contrôleur (méthode) (couche présentation) est lié à un point d'entrée dans une classe de couche application, comme indiqué dans Figure 3.

Figure 3 CQRS contrôleur

public class SomeController
{  
  public ActionResult SomeQueryTask(InputModel input)
  {
    var service = new QueryStack.SomeService();
    var model = service.GetActionViewModel(input);
    return View(model);
  }
  public ActionResult SomeCommandTask(InputModel input)
  {
    var service = new CommandStack.SomeService();
    service.GetActionViewModel(input);
    RedirectToAction(...);
  }
}

Les deux classes de service quelconque sont la section de la couche d'application qui est visible à partir de la partie de la couche de présentation représentée par la classe SomeController. Les deux classes de service quelconque peuvent faire partie du même projet physique et assembly que la présentation ou être des projets et des assemblys distincts. Envisagez, structuralement parlant, la couche d'application va de pair avec la couche de présentation. Cela signifie que lorsque plusieurs couches de présentation sont requises (autrement dit, Web, Web mobiles et des applications mobiles) il est acceptable d'avoir plusieurs couches d'application avec une réutilisabilité limitée de la logique suivante.

Vous avez une entrée point de méthode dans la couche d'application pour chaque tâche possible que l'utilisateur peut déclencher à partir de l'interface utilisateur approuvé. Si vous reproduisez fidèlement les modèles filaires que vous avez reçu, vous savez exactement ce qui apparaît dans chaque écran. Vous venez ne peut pas rendre incorrect. Par exemple, il peut être inefficace ou lente mais jamais incorrect.

La couche d'application échange des objets de transfert de données avec la présentation et orchestre les flux de travail requis pour la tâche. Dans ce cas, la couche application doit généralement lire et écrire des données à partir d'un magasin persistant, accéder aux services Web externes et effectuer des calculs. C'est logique de domaine juste et logique de domaine est indifférente aux cas d'usage. Si demandée à partir d'un site ou une présentation mobile, la tâche de domaine d'entreprise exécute la même chose et est entièrement réutilisable. En bref, l'idée de la logique métier est divisée en deux segments plus spécifiques, logique de l'application en tant que la logique nécessaire pour implémenter la présentation des scénarios d'utilisation et logique de domaine est indifférente aux cas de présentation et d'utilisation.

La logique de domaine peut être conçue en fonction d'une variété de modèles, y compris le Script de Transaction et le Module de la Table. Dans ce cas, les règles d'entreprise sont un corps étranger injecté dans les classes que vous utilisez. En règle générale, les règles d'entreprise forment une calculatrice de que vous appelez pour obtenir une réponse à propos de la faisabilité d'une action. Le modèle de domaine — souvent présentées l'essence true de la conception pilotée par domaine, est simplement un modèle qui suggère de créer des classes qui se comportent comme des entités réelles et par la suite intègrent les règles d'entreprise et masquer leur application dans les méthodes offertes. Il n'existe aucun moyen de bonne ou de mauvaise de la conception logique de domaine, c'est une question d'attitude et d'efficacité pure.

Dans une conception basée sur les tâches, vous voir immédiatement si l'action modifie l'état du système ou signale. En utilisant un modèle CQRS, vous fractionnez naturellement des commandes à partir de requêtes, et comportant des piles distinct offre les avantages d'écriture et de les optimiser séparément sans risque de régression, même avec le potentiel d'évolutivité simplifiée. CQRS est naturellement dans un contexte UXDD.

Persistance au dernier !

Passage du haut vers le bas, inévitablement la persistance est la dernière de vos priorités. Ne pas vous tromper : Toutes les applications ont besoin de disposer de données persistantes efficacement et les données qui peuvent être interrogées efficacement. La dernière de vos priorités ne signifie pas que vous oubliez de persistance ; Cela signifie simplement que dans un système orienté utilisateur et interactif, la conception de persistance devient critique uniquement après les autres aspects, spécifiquement une expérience utilisateur et domaine logique, ont été supprimées. Juste pour cette raison, vous n'avez aucuns contraintes sur la base de données la technologie à utiliser. En outre, si vous avez une conception CQRS, puis vous pouvez facilement définir plusieurs couches de persistance, l'autre pour les commandes et pour les requêtes, gérés indépendamment et même, si qui aide — basées sur différentes technologies de stockage et paradigmes. Par exemple, si vous savez que, à un moment donné, analyse doit être signalée à l'interface utilisateur, peut vouloir adopter un cadre event sourcing et effectuer le suivi de chaque mise à jour et les actions appropriées comme un événement. Cela vous donnera le journal complet de tout ce qui s'est produite dans le système et peut être utilisé à un moment donné comme point de départ de l'analyse automatique faite business intelligence. En même temps, si vous avez besoin des données prêtes à l'emploi à répondre rapidement à l'utilisateur, vous gardez le récepteur d'événements synchronisés à distance avec une projection des données adapté à vos besoins de présentation. Une projection des données dans ce contexte est généré après une liste d'actions. Il est identique à disposé à connaître le solde de compte bancaire (la projection) résultant d'une liste des transactions (événements). La pile de la requête est souvent constituée de brut, SQL Server considère alors que la pile de commande peut être basée sur des tables relationnelles, magasin de NoSQL ou des événements, y compris toute combinaison de ceux-ci.

Il s'agit simplement le quelques appels persistance POLYGLOTTE.

Synthèse

Plaise ou non, les utilisateurs jugent principalement le système le sentiment d'oser de leur expérience directe. Aujourd'hui, le facteur clé pour économiser de l'argent sur des projets logiciels est de vous assurer que vous créez, tout de suite, exactement ce que les utilisateurs veulent. Il n'est pas quasiment il, mais le font correctement, tout de suite. Avec UXDD vous connaissez le plus rapidement possible pour le résultat que vous allez créer le système et cela réduit les correctifs à appliquer lorsque vous déployez le système et les utilisateurs ne l'aimez pas réellement. En outre, avec une conception de haut en bas votre expérience de conception est naturellement dirigé vers des modèles modernes tels que CQRS et persistance POLYGLOTTE qui, bien au-delà du niveau de jure, sont pratiques pour créer des logiciels efficaces.


Dino Espositoest le co-auteur de « Microsoft .NET : Conception d'Applications pour l'entreprise » (Microsoft Press, 2014) et « Applications Web modernes » (Microsoft Press, 2016). Un développeur chez Microsoft .NET Framework et les plateformes Android chez JetBrains et manifestations secteur dans le monde entier, Esposito partage sa vision du logiciel à software2cents.wordpress.com et sur Twitter : @despos.

Merci aux experts techniques suivants d'avoir relu cet article : Jon Arne Saeteras