J'ai une application pour entrer des numéros de série dans une base de données. Un numéro de série a un nombre défini d'attributs qui le définit et que l'utilisateur doit/peut fournir à générer.Motif pour l'interface utilisateur: même objet, affiché différemment
public class Serial
{
public string Number {get; set;}
public string Part {get; set;}
public string MfgOrder {get; set;}
public string CusOrder {get; set;}
public string Note {get; set;}
... etc ...
}
Maintenant, le point de départ de cette application demande à l'utilisateur pour l'un des plusieurs éléments d'information (par exemple un numéro de pièce ou ordre de fabrication, etc.). Ce point de départ peut déjà remplir une partie de l'entrée utilisateur requise. Je voudrais ensuite prendre ces éléments connus et modifier le formulaire en fonction d'eux.
Par exemple. Si deux des informations sont Numéro de pièce et Numéro de commande Mfg, et que l'utilisateur fournit le numéro de commande Mfg (qui a un lien avec le numéro de pièce de la base de données), je souhaite afficher ces valeurs sans les autoriser édité. Si à la place, l'utilisateur me donne juste un numéro de pièce, je veux permettre à l'ordre de Mfg d'être présenté comme une zone de texte avec (éventuellement) facultatif ou requis à côté de lui.
public class MfgOrder
{
public string MfgOrder {get; set;}
public string Part {get; set;}
}
...
MfgOrder order = new MfgOrder(some_user_value); // queries database, returns populated object
Serial serial = new Serial() {
MfgOrder = order.MfgOrder,
Part = order.Part
};
Cette application fonctionne en ce moment en ayant juste si/alors des conditions dans l'interface utilisateur - si vous me donniez un Mfg ordre, représenterez cette façon, si vous me donniez autre chose, faites-le de cette façon, Le problème est que plusieurs nouvelles options ont été demandées et que le chaînage continu des instructions if/then devient vraiment moche.
if(serial.comes_from_mfgOrder == true)
{
%>Manufacturing Order: <%=serial.MfgOrder %><%
} else if (serial.comes_from_part_number == true) {
%>Manufacturing Order: <%=Html.Textbox("MfgOrder")%><%
} else if // continue this for way too long now ...
Y at-il un bon motif de conception ici?
Merci!
Je n'ai pas plein lien lu donc je pourrais être absent le point, mais je suis d'accord pour déplacer une aide est certainement quelque chose que je devrais faire indépendamment. La chose est que je voudrais toujours remplacer une chaîne d'instructions if/then avec une solution plus élégante si possible. – anonymous
Eh bien, le problème le plus important que j'ai avec l'exemple que vous montrez n'est pas le nombre d'ifs, mais le fait qu'il semble mettre la logique métier dans la vue. Au lieu de cela, le modèle doit spécifier quels champs sont requis et la vue doit simplement y obéir. Ifs par eux-mêmes sont bien. –
Je suis d'accord. J'aimerais que tout cela soit défini dans le modèle, mais pas dans le modèle «Serial», ce qui pourrait expliquer pourquoi j'ai un tel blocage mental. – anonymous