20140130 mug lyon - post-mortem d'une application métier

Post on 27-Jun-2015

297 views 0 download

Tags:

Transcript of 20140130 mug lyon - post-mortem d'une application métier

Post-mortem d’une application métier

30/01/2014

Votre interlocuteurMatthieu DUFOURNEAUDRéférent Technique - Exakis

matthieudu@exakis.com+33 6 65 93 41 05

PrésentationOrdre du jour

PrésentationOrdre du jour Conception d’une application

métier

PrésentationOrdre du jour Conception d’une application

métier Bilan des choix techniques

PrésentationOrdre du jour Conception d’une application

métier Bilan des choix techniques

Discussion et question

PrésentationOrdre du jour

Conception d’une application métier Bilan des choix techniques

Discussion et question

Présentation ExakisPrésentation MUG Lyon

Présentation Exakis

Exakis, première Entreprise de Services du Numérique Microsoft

Notre positionnement Partenaire pure-player de Microsoft leader en France

Notre objectif

Vous apporterdes solutions technologiquesqui vous permettront d’améliorer vos performances

Notre métier

Intégration de solutions pour l'entreprise basée surla plateforme Microsoft

Une couverture large et cohérente des besoins de nos clients

Innovation et solutions logicielles

Social et collaboration

Datacenter et cloud

Environnement utilisateur et mobilité

Communications unifiées

Sécurité et gestion des identités

Présentation MUG Lyon

Un objectif

Microsoft User Group lyonnais pour partager et débattre autour de technologies passionnantes et innovantes :)

Un collectif

Clément BOUILLIER / DevLyon / @clem_bouillier Matthieu DUFOURNEAUD / Exakis / @mdufourneaud Grégory OTT / Tekigo / @gregory_ott Emilien PECOUL / DevLyon / @Ouarzy Florent PELLET / DevLyon / @florentpellet Yannick RINGAPIN / MCNEXT / @BlackBeard486 Vincent THAVONEKHAM / Objet Direct / @vThavo Benjamin WISNIEWSKI / Apollo SSC / @_b3w Vous ? (cotisation 5€)

Des évènements

Chaque dernier jeudi du mois Idées de sessions Speakers

Nous contacter

muglyon.github.io Twitter @MUGLyon Facebook /

www.facebook.com/groups/118200884904279 LinkedIn / www.linkedin.com/groups/MUG-Lyon-

4302523

PrésentationOrdre du jour Conception d’une application

metierQuel type d’application ?Quel type de services Web ?Quel ORM ?Quel parser d’expression ?Comment concilier génération de code et polymorphisme ?Comment simplifier l’utilisation cliente d’un service Web REST ?Comment conjuguer les contraintes de consultation et d’édition ? Bilan des choix techniques

Discussion et Questions

Conception d’une application métier

Besoin métier

Refonte d’une application de calculs de ristournes Prévoir possibilité simulations de calculs Simulations réalisées chez le client en déconnecté

Quel type d’application ?

Web Native

ClientMVVM

Services

Quel type d’application ?

Web Client / HTML/CSS/JS Services / C#

Native

Quel type d’application ?

Web Native

Client / XAML/C# Services / C#

Quel type d’application ?

Web Native

Permet de partager le moteur de calculs des services avec le client

Quel type de services Web ?

TCP HTTP SOAP HTTP REST

Quel type de services Web ?

TCP Simplicité Débuggabilité Intéropérabilité Cache Performance

HTTP SOAP HTTP REST

Quel type de services Web ?

TCP HTTP SOAP

Simplicité Débuggabilité Intéropérabilité Cache Performance

HTTP REST

Quel type de services Web ?

TCP HTTP SOAP HTTP REST

Simplicité Débuggabilité Intéropérabilité Cache Performance

Quel type de services Web ?

TCP HTTP SOAP HTTP REST

Meilleur débuggabilité Cache HTTP natif disponible

Quel ORM ?

Entity Framework NHibernate

Quel ORM ?

Entity Framework LINQ Génération automatique des entités Mapping automatique des entités « Boîte noire »

NHibernate

Quel ORM ?

Entity Framework NHibernate

LINQ Logs Filtres Pas de génération automatique des entités Pas de mapping automatique des entités

Quel ORM ?

Entity Framework Génération automatique des entités

NHibernate LINQ Logs Filtres Mapping automatique par convention

Quel parser d’expression ?

Irony ANTLR GOLD Parsing System

Quel parser d’expression ?

Irony Grammaire Débuggabilité Communauté

ANTLR GOLD Parsing System

Quel parser d’expression ?

Irony ANTLR

Grammaire Débuggabilité Communauté

GOLD Parsing System

Quel parser d’expression ?

Irony ANTLR GOLD Parsing System

Grammaire Débuggabilité Communauté

Quel parser d’expression ?

Irony Grammaire en C#

ANTLR GOLD Parsing System

Comment concilier génération de code et polymorphisme ?

Entity.generated.cs

partial class Entity{ AProperty { get; set; } AnotherProperty { get; set; } …}

Entity.cs

partial class Entity{}

Impossible de surcharger les

propriétés générées

Comment concilier génération de code et polymorphisme ?

EntityBase.generated.cs

class EntityBase{ AProperty { get; set; } AnotherProperty { get; set; } …}

Entity.generated.cs

partial class Entity : EntityBase{}

Entity.cs

partial class Entity{}

Comment simplifier l’utilisation cliented’un service Web REST ?

Pas de découvrabilité URLs en chaînes de caractères rendent difficile le

refactoring

Comment simplifier l’utilisation cliented’un service Web REST ?

Utilisation d’objets messages partagés entre le client et les services

Construction automatique des URLs via convention basée sur le type du message

Comment conjuguer les contraintes deconsultation et d’édition ?

Consultation Beaucoup d’écrans de consultation Modifications fréquentes Accès aux données spécifique à l’écran Pas de modification des données Dé-normalisation utile

Edition Accès aux données commun aux écrans Modification des données Normalisation nécessaire

Comment conjuguer les contraintes deconsultation et d’édition ?

CQRS (Command Query Responsibility Segregation)

Comment conjuguer les contraintes deconsultation et d’édition ?

CQRS-spirit

ReadOnlyRepository

QueryController

CommandController

RepositoryService

PrésentationOrdre du jour Conception d’une application

métier Bilan des choix techniquesQuel type d’application ?Quel type de services Web ?Quel ORM ?Quel parser d’expression ?Comment concilier génération de code et polymorphisme ?Comment simplifier l’utilisation cliente d’un service Web REST ?Comment conjuguer les contraintes de consultation et d’édition ?

Discussion et Questions

Bilan des choix techniques

Quel type d’application ?

Simulation pas encore implémentée, ni planifiée

Quel type de services Web ?

Débuggage facilité Pas de problème de latence rencontré Cache pas encore utilisé

Quel ORM ?

Logs essentiels aux débuggage et à l’optimisation Utilisation transparente des filtres Nécessité de corriger l’EDMX après sa génération Mauvaise gestion du mapping des booléens Oracle

par le designer d’EDMX

Quel parser d’expression ?

Grammaire codée en moins de 30 lignes de C#

Comment concilier génération de code et polymorphisme ?

Ça fonctionne

Comment simplifier l’utilisation cliented’un service Web REST ?

Développement simplifié Débuggage facilité Organisation des messages à optimiser

Comment conjuguer les contraintes deconsultation et d’édition ?

Développement simplifié Maintenabilité augmentée Pas de mesure du gain en performance Trop tôt pour mesurer le gain en évolutivité Refactoring nécessaire pour mettre en place des

bases génériques

PrésentationOrdre du jour Conception d’une application

métier Bilan des choix techniques

Discussion et Questions

Discussion et Questions

Prochains évènements

Forum des communautés IT lyonnaises / mardi 4 février

Coding Dojo DDD / jeudi 20 février MUG Lyon / Injection de dépendances / jeudi 27

février Global Windows Azure Bootcamp: le premier GWAB

à Lyon !!! / samedi 29 mars