Projet de fin d'Etudes : Clinique INSIA (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS)
Et voilà ! Une année cloturée avec un beau projet utilisant Silverlight 3 et plus particulièrement le mode OutOfBrowser pour la partie applicative. Je souhaitais partager mon enthousiasme avec la communauté sur ce projet et démontrer ici qu’il était possible de construire une solution sérieuse dans le domaine médicale avec Silverlight 3… même en béta !
Définition du contexte :
La Clinique INSIA dispense un certain nombre de soins spécialisés, reposant chacun sur un matériel spécifique. La Clinique dispose d'un site internet, qui constitue à la fois une vitrine/interface avec les patients, mais devrait également constituer un puissant outil de communication/organisation en interne.
L’entreprise est installée à Paris ( XXe ) : c'est sur cet unique site que devront être déployées les applications ( hormis web, pouvant être placé chez un hébergeur ).
La Clinique se trouve aujourd'hui confrontée à des besoins, certes anciens, devant trouver une solution souple et efficace :
- capacité à communiquer efficacement, rapidement et massivement vers l'extérieur,
- centraliser et normaliser la communication et l'organisation en interne ,
- augmenter l'efficacité de taches ponctuelles par l'ajout d'outils spécifiques,
- améliorer l'efficacité de services en perfectionnant l'utilisation de certaines ressources.
Technologies Utilisées :
- Visual Studio Team System 2008 et Team Foundation Server pour la partie gestion de projet, contrôle de code source, intégration continue et développement.
- SQL Server 2008 BI/Data : Intégration des codes postaux, des médicaments, mais aussi Analysis Services et Reporting Services
- Silverlight 3 béta pour la vitrine internet et applicative (mode out of browser) : Deux applications à réaliser .. une seule avec Silverlight 3, déploiement facilité pour l’applicatif client.
- WCF : Dans une solution hospitalière, il est préférable d’exposer nos fonctionnalités sous forme de service
réutilisable par d’autres applications.
Apercu de certains écrans :
Intégration Virtual Earth pour la géolocalisation :

| Présentation des activités :

|
BackOffice avec persistence des crédentials dans l’isolated storage | Mode OutOfBrowser |
CrudViewModelBase et le pattern MVVM avec Silverlight 3 :
Le pattern MVVM apporte des vrais solutions d’architecture logicielle dans nos applications WPF ou Silverlight d’aujourd’hui, vous trouverez plein de liens à ce sujet sur internet notamment : http://msdn.microsoft.com/fr-fr/magazine/dd458800.aspx
Au cours du projet nous avons fait face à plusieurs écrans de Creation, Lecture, Edition, et Suppression d’une entité au sens Linq To SQL T4 :
- Traitement en local sur la collection d’entité (Ajout, Suppression, Modification ..)
- Utilisation de l’isolated storage et mécanisme de change tracking sur les entités en reflection
- Recherche
Faire une copie de la collection source :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
private ObservableCollection GetShallowCopy() { ObservableCollection cloneList = new ObservableCollection();
foreach (T item in CollectionOriginals) { object cloneItem = Activator.CreateInstance(typeof(T));
foreach (PropertyInfo property in item.GetType().GetProperties()) { property.SetValue(cloneItem, property.GetValue(item, null), null); }
cloneList.Add((T)cloneItem); } return cloneList; } |
Vérifier si une entité a été modifié :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
private bool CheckIfModified(T canBeModifiedEntity, T originalEntity) { foreach (PropertyInfo pOfCanBeModifiedEntity in canBeModifiedEntity.GetType().GetProperties()) { object propertyValueM = pOfCanBeModifiedEntity.GetValue(canBeModifiedEntity, null); object propertyValueO = originalEntity.GetType().GetProperty(pOfCanBeModifiedEntity.Name).GetValue(originalEntity, null);
if (propertyValueM != null && propertyValueO != null) { if (!propertyValueM.Equals(propertyValueO)) { return true; } } }
return false; } |
Annuler les modifications :
1 2 3 4 5 6 7 |
public void UndoChanges() { ClearChangeTracking(); CollectionOfEntities = null; SelectedItem = default(T); CollectionOfEntities = GetShallowCopy(); } |
Le but étant de travailler en local et de contacter le serveur seulement sur les entités impactés.
Dans les prochains posts je reviendrais sur d'autres aspects que je considère intéressant du projet...
Conclusion .. Silverlight Rulez :)
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :