Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

Actualités

Shift

View Georges Legros' profile on LinkedIn


[.Net] Gestion d’un framework

Cet article est valable pour tous les types de Framework mais l’exemple que m’occupe concerne plus particulièrement Silverlight.

Mise en place du décor:

Dans mon projet actuel, je suis impliqué dans un Framework ayant pour but de fournir des contrôles Silverlight aux autres projets en cours dans la boite.

La semaine dernière avec mon responsable, nous avons ouvert un débat: “Quelle est la meilleure manière de gérer les namespaces ?”

La première approche que nous avons suivie consistait en ces 2 principes :

  1. Chaque contrôle ou groupe de contrôles liés (par exemple TabControl et TabItem) ont un répertoire dédié.
  2. Les namespaces collent à la hiérarchie physique interne du projet

Nous avions donc des namespaces qui ressemblent à “CompanyName.ProjectName.AssemblyName.FolderName”

Ce qui a pour résultat dans le cas des TabControl et TabItem custom de donner les noms complets suivants:

  • CompanyName.ProjectName.AssemblyName.TabControl.CustomTabControl
  • CompanyName.ProjectName.AssemblyName.TabControl.CustomTabItem

Description du problème :

Le Framework a pas mal évolué depuis ses débuts et nous avons maintenant plusieurs dizaines de contrôles. Cela implique que nous avons également plusieurs dizaines de namespaces.

Pour certains contrôles nous avons également créé des librairies dédiées. Ainsi nous avons 2 type de DataGrid différentes et chacune a son assembly.

Solution possible :

En regardant comment d’autres gèrent cela, nous nous sommes attardé sur la solution type Microsoft.

En effet, l’exemple de Microsoft nous montre qu’il n’est pas du tout nécessaire de créer une collection de namespace. Leur approche tout à fait différente. Par exemple, l’assembly System.Windows.Controls (http://msdn.microsoft.com/en-us/library/system.windows.controls.aspx) contient tous les contrôles de la librairie sans “sous-namespace”.

Plus interpellant, d’autres librairies rajoutent parfois du contenu directement dans System.Windows.Controls…

Il y a également certains contrôles tels que la DataGrid qui arrive dans System.Windows.Controls.Data.

Le choix effectué :

L’approche Microsoft est plutôt tentante car elle nous permettrait de limiter les namespace devenant très encombrants. Elle a toutefois un désavantage conséquent : un seul folder pour contenir des dizaines de classes ça fait rapidement désordre.

Nous avons donc décidé de casser la règle prise au début qui disait que “Les namespaces collent à la hiérarchie physique interne du projet”.

Nous avons donc réussi à éliminer nos namespaces inutiles mais également à garder un certain ordre permettant une gestion et une maintenance facile.

Et vous ?

Pour être tout à fait honnête, le but de ce post était double.

Il me permet de partager avec vous le process qui nous suivons mais également de vous demander de quelle manière vous feriez.

Qui sait, nous n’avons pas encore commencé le refactoring, nous trouverons peut-être de très bonnes idées dans vos approches personnelles.

Au plaisir de vous lire…

A bientôt,

DjoDjo

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 :

Publié dimanche 31 janvier 2010 12:21 par DjoDjo

Classé sous : ,

Commentaires

# re: [.Net] Gestion d’un framework @ dimanche 31 janvier 2010 13:13

Quelque chose de très important à prendre en compte avec Silverlight, c'est aussi le coût en terme de "taille" des librairies de controles.

Il faut donc essayer de séparer la librairies en plusieurs assemblies les plus indépendantes possibles (comme le fait le SL toolkit d'ailleurs), afin de ne pas surcharger le XAP de l'application finale avec des controles inutilisés.

Autre astuce très utile : l'a création de fichiers extmap.xml à côté des DLL pour faire en sorte que le XAP ne contienne que le code de l'application, et que le framework soit placé dans des zip à part, voir même téléchargé à partir d'un CDN.

simon ferquel

# re: [.Net] Gestion d’un framework @ dimanche 31 janvier 2010 13:44

Effectivement la taille du Xap est très importante et c'est effectivement la raison pour laquelle nous avons plusieurs assembly (Input, Layout, ...).

Je ne connaissait pas l'astuce des fichier extmap.xml, je vais faire quelques recherches afin d'en savoir plus.

Merci pour ces informations !

DjoDjo

# re: [.Net] Gestion d’un framework @ dimanche 31 janvier 2010 19:31

Le mieux à mon avis c'est de suivre l'exemple de Microsoft: réduire les namespaces, réduire les assemblies. Pour les assemblies, en Silverlight, c'est encore plus vrai, il vaut mieux en avoir le moins possible.

Ce n'est pas pour rien que c'est fait comme ça par Microsoft. D'ailleurs c'est ce que préconise l'outil FXCop (ou Code Analyser sous Visual Studio), fort logiquement puisqu'il sert avant tout à ... Microsoft.

Personnellement, je ne trouve pas qu'un seul répertoire pour plusieurs classes, ça fait désordre. Ca n'empêche pas de spécialiser chaque développeur sur des classes dont il est propriétaire.

smo

# re: [.Net] Gestion d’un framework @ dimanche 31 janvier 2010 21:44

Quand je dis que ca fait désordre, je veux dire qu'il devient rapidement difficile de s'y retrouver.

Personnelement, j'aime le fait de trier les classes par dossier.

Le framework sur lequel je bosse est passé par plusieurs mains avant de que je n'arrive dans l'équipe. Certains développeurs ne font maintenat plus partie de la société. Ce qui m'oblige parfois a faire du support sur des classes que je n'ai pas écrit. Cela me fait dire qu'il n'est pas nécessairement bon de rendre des développeurs "propriétaire" des classes qu'ils écrivent. C'est d'ailleurs pour cela que nous essayons (tant que possible mais la réalité du terrain et vous en conviendrez et souvent différente) de faire un maximum de code review.

Nous utilisons FxCop mais je vais égallement regarder la facon dont il est paramètré pour voir s'il remonte ces informations lors ou si elles ont été désactivées.

DjoDjo

# re: [.Net] Gestion d’un framework @ mercredi 3 février 2010 14:42

Et si tu regardes les propriétés du répertoire et que tu lui met la propriété : "Namespace Provider" à false, est ce que ça casse la règle aussi? à vérifier...

ZeBobo5

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01