ScénarioEnterprise Library Validation bloc d'application et Internationalisation
Une application de bureau .NET/WPF doit être localisée (ou en termes MS globalisée) à une autre langue que l'anglais. Autrement dit, l'interface utilisateur doit être complètement adoptée (étiquettes, icônes, ...).
Les entrées de fichier journal, les entrées de piste d'audit et les autres sorties de l'application doivent cependant rester en anglais pour permettre au personnel de service/d'assistance anglophone de l'examiner. Ils ne parlent ni français ni chinois.
L'application s'appuie sur des fichiers RESX pour effectuer la localisation.
Le bloc de validation de la bibliothèque d'entreprise est utilisé pour la validation des règles métier sur le modèle d'objet. Supposons maintenant qu'il existe un service qui valide ses arguments de modèle objet donnés avant d'exécuter la logique métier réelle. Dans certaines circonstances, il reçoit des arguments de modèle d'objet incorrects mais continue l'exécution avec le meilleur effort. La fourniture de données de modèle d'objet non valide, cependant, doit être enregistrée dans la piste d'audit et dans le fichier journal.
Exemple de service utilisant le bloc de validation.
public class Service : IService
{
public void MyMethod(MyObjectModelObject obj)
{
Validator validator = ValidationFactory.CreateValidator(typeof(MyObjectModelObject));
ValidationResults results = validator.Validate(this);
// !!! The messages in the validation results are now already localized to CurrentCulture.
// ... build a log message: msg
if (results.Count > 0)
{
Logger.Log(msg);
}
}
}
Comme indiqué dans le commentaire de code, lorsque vous avez appelé Valider() sur le validateur EnterpriseLibrary, les messages de validation sont déjà localisés en français et vous avez aucune chance de les écrire à un exemple Fichier journal anglais.
Dans d'autres domaines de notre application, nous utilisons une classe de message qui encapsule l'ID de ressource et les paramètres jusqu'à ce que nous soyons certains de la culture que nous voulons utiliser pour résoudre la valeur de chaîne réelle. Vous pourriez l'appeler une résolution de ressource différée.
Des idées pour introduire un mécanisme similaire au bloc Enterprise Library Validation? Idées à ce jour:
- Commutation du CurrentCulture temporairement (je ne sais pas comme ça et il ne résout que la moitié du problème)
- Patch du bloc de validation Enterprise Library (je ne sais pas comme ça aussi)
Merci pour votre aide et vos idées partagées!
Merci beaucoup pour votre contribution Tuzo! L'inconvénient mentionné est un gros inconvénient pour nous - nous avons absolument besoin de messages composés dynamiquement. Nous sommes en train de modifier l'implémentation du bloc de validation EntLib pour qu'il fonctionne complètement avec notre classe de message au lieu de chaînes résolues avec impatience. Une tâche plutôt lourde mais à la fin nous avons une approche unique tout au long de notre application. Le gros inconvénient est la maintenance, mais le bloc de validation a été assez stable à ses concepts de base dans les dernières versions. –