Question

J'ai construit un simple site d'entrée de billets basé sur MVC3 pour une application de centre d'appels moins qu'utilisable et je tente de refactoryer mon prototype pour mieux adhérer aux modèles de conception en partie pour le rendre plus maintenable à l'avenir, mais surtout comme exercice d'apprentissage. La vue orientée utilisateur est un formulaire composé d'informations utilisateur de base en plus de quelques panneaux permettant la sélection de différents types de ressources. Chaque type de ressource (matériel, logiciel, etc.) s'affiche de la même manière: à l'aide de boîtes à liste double et filtrables avec des boutons ADD / Supprimer, une textare de «justification» facultative qui s'affiche conditionnellement si une ressource demandée nécessite une justification et des commentaires généraux. J'ai construit le ViewModel suivant pour les panneaux individuels:

public class RequestableList
{
    // list of requestable items ids requiring justification
    private List<string> _restrictedItems = new List<string>();
    public List<string> RestrictedItems
    {
        get { return _restrictedItems; }
        set { _restrictedItems = value; }
    }

    // the key-value pairs from which to populate available items list
    private Dictionary<string, string> _availableItems = new Dictionary<string, string>();
    public Dictionary<string, string> AvailableItems
    {
        get { return _availableItems; }
        set { _availableItems = value; }
    }

    // item ids requested by user
    private List<string> _requestedItems = new List<string>();
    public List<string> RequestedItems
    {
        get { return _requestedItems; }
        set { _requestedItems = value; }
    }
}

Le principal ViewModel est ensuite composé de multiples listes de demande si nécessaire:

public class SimpleRequestViewModel
{
    public UserInfo userInfo { get; set; }
    public RequestableList Software {get;set;}
    public RequestableList Hardware {get;set;}
    public RequestableList Access {get;set;}
    public string SoftwareAdditionalInfo { get; set; }
    public string HardwareAdditionalInfo { get; set; }
    public string AccessFileMailShare { get; set; }
    public string AccessAdditionalInfo { get; set; }
    public string SoftwareJustification { get; set; }
    public string HardwareJustification { get; set; }
    public string AccessJustification { get; set; }
    public string Comment { get; set; }
}

J'ai créé une vue fortement tapée pour SimpleRequestViewModel (et sa variante) et un EditorTemplate fortement typé pour DequedableLlist qui câble les deux boîtes de liste, le filtrage et jQuery. Tout rend bien et fonctionne, mais le code sent actuellement.

Lors de la publication sur le contrôleur, si le modèle est valide, je dois le traduire dans une description de texte lisible afin de créer un nouveau billet dans l'application Call Center. Il ne semble pas juste que le contrôleur exécute cette traduction en texte lisible, mais je rencontre des obstacles lorsque je essaie de concevoir une autre classe pour traduire les Oodels ViewM.

  1. Seules les valeurs d'élément sélectionnées sont publiées donc avant de traduire la demande en texte, je dois d'abord rechercher le texte approprié pour les valeurs fournies (elles sont requises dans la description). Le contrôleur est actuellement le seul objet qui a accès au modèle de données du centre d'appels pour cette requête de recherche.
  2. Il existe 2 modèles de vue similaires contenant des combinaisons variables de listes de demande afin que tout traducteur puisse être en mesure de traduire les différentes combinaisons. L'un n'a que du matériel et des logiciels, un autre peut avoir des logiciels matériels et quelques autres listes de demande.

J'ai envisagé de remplacer ToString () directement dans le ViewModel mais je n'aimais pas cette logique métier (rendu conditionnel), et encore une fois, une fois publié, le ViewModel ne contient pas le texte des éléments sélectionnés dans la boîte de liste afin qu'il ait besoin d'accès au modèle de données. La traduction des valeurs publiées en texte car elle est actuellement traitée dans le contrôleur odeurs car elle est traitée dans une instruction Switch. Le contrôleur prend chaque demande de demande publiée et remplit les champs d'origine «disponibles» avant qu'il ne construise la nouvelle description du billet.

switch (requestCategory)
{
    case RequestableCategory.Software:
        itemList = sde.GetSoftware();
        break;
    case RequestableCategory.Hardware:
        itemList = sde.GetHardware();
        break;
    case RequestableCategory.Access:
        itemList = sde.GetAccess();
        break;
    case RequestableCategory.Telecom:
        itemList = sde.GetTelecom();
        break;
    default:
        throw new ArgumentException();
}

Donc, mes questions (s):

  1. Quels modèles sont des techniques recommanderiez-vous pour effectuer la traduction de la traduction de la description des billets publiés?
  2. Comment gérez-vous généralement le problème «uniquement des messages» avec des cases sélectionnées lorsque vous avez besoin du texte ainsi que de la valeur?
  3. Y a-t-il une meilleure façon pour moi d'approcher ce problème?

Encore une fois, j'espère qu'il s'agit d'une expérience d'apprentissage pour moi et je suis plus que disposé à fournir des informations ou des description supplémentaires si nécessaire.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top