Bonnes pratiques .NET/C
Votre tâche est de garantir que le code .NET/C# dans ${selection} respecte les bonnes pratiques spécifiques à cette solution/projet. Cela inclut :
Documentation et structure
- Créer des commentaires de documentation XML exhaustifs pour toutes les classes publiques, interfaces, méthodes et propriétés
- Inclure les descriptions de paramètres et les descriptions de valeurs de retour dans les commentaires XML
- Respecter la structure d'espace de noms établie : {Core|Console|App|Service}.{Feature}
Modèles de conception et architecture
- Utiliser la syntaxe du constructeur principal pour l'injection de dépendances (ex :
public class MyClass(IDependency dependency)) - Implémenter le modèle Command Handler avec des classes de base génériques (ex :
CommandHandler<TOptions>) - Utiliser la ségrégation d'interface avec des conventions de nommage claires (préfixer les interfaces avec 'I')
- Suivre le modèle Factory pour la création d'objets complexes.
Injection de dépendances et services
- Utiliser l'injection de dépendances par constructeur avec vérifications null via ArgumentNullException
- Enregistrer les services avec les durées de vie appropriées (Singleton, Scoped, Transient)
- Utiliser les modèles Microsoft.Extensions.DependencyInjection
- Implémenter des interfaces de service pour la testabilité
Gestion des ressources et localisation
- Utiliser ResourceManager pour les messages localisés et les chaînes d'erreur
- Séparer les fichiers de ressources LogMessages et ErrorMessages
- Accéder aux ressources via
_resourceManager.GetString("MessageKey")
Modèles Async/Await
- Utiliser async/await pour toutes les opérations I/O et les tâches longues
- Retourner Task ou Task<T> à partir des méthodes asynchrones
- Utiliser ConfigureAwait(false) le cas échéant
- Gérer correctement les exceptions asynchrones
Standards de test
- Utiliser le framework MSTest avec FluentAssertions pour les assertions
- Suivre le modèle AAA (Arrange, Act, Assert)
- Utiliser Moq pour simuler les dépendances
- Tester à la fois les scénarios de succès et d'échec
- Inclure les tests de validation de paramètres null
Configuration et paramètres
- Utiliser des classes de configuration fortement typées avec des annotations de données
- Implémenter les attributs de validation (Required, NotEmptyOrWhitespace)
- Utiliser la liaison IConfiguration pour les paramètres
- Prendre en charge les fichiers de configuration appsettings.json
Semantic Kernel et intégration IA
- Utiliser Microsoft.SemanticKernel pour les opérations IA
- Implémenter la configuration correcte du noyau et l'enregistrement des services
- Gérer les paramètres du modèle IA (ChatCompletion, Embedding, etc.)
- Utiliser des modèles de sortie structurés pour des réponses IA fiables
Gestion des erreurs et journalisation
- Utiliser la journalisation structurée avec Microsoft.Extensions.Logging
- Inclure la journalisation avec portée avec un contexte significatif
- Lever des exceptions spécifiques avec des messages descriptifs
- Utiliser les blocs try-catch pour les scénarios d'échec prévus
Performance et sécurité
- Utiliser les fonctionnalités C# 12+ et les optimisations .NET 8 le cas échéant
- Implémenter la validation et l'assainissement appropriés des entrées
- Utiliser des requêtes paramétrées pour les opérations de base de données
- Suivre les pratiques de codage sécurisé pour les opérations IA/ML
Qualité du code
- Assurer la conformité aux principes SOLID
- Éviter la duplication de code par le biais de classes de base et d'utilitaires
- Utiliser des noms significatifs qui reflètent les concepts du domaine
- Garder les méthodes ciblées et cohésives
- Implémenter les modèles d'élimination appropriés pour les ressources