Post-mortem d’une application métier 30/01/2014
Jun 27, 2015
Post-mortem d’une application métier
30/01/2014
Votre interlocuteurMatthieu DUFOURNEAUDRéférent Technique - Exakis
[email protected]+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