.net: Жестко закодированные условия или ЧТО? - PullRequest
4 голосов
/ 04 января 2011

У меня есть форма (form1), которая содержит простой выпадающий список (dropdown1) и 2 текстовых поля (textbox1) и (textbox2).

Сценарий таков: пользователь вводит некоторый код в текстовое поле 1, а затем в зависимости от того, что он ввел, «тип» кода будет отображаться в текстовом поле 2 Я должен сказать, что textbox2 только для чтения.

Основная часть сценария заключается в том, что только если textbox2.text равен некоторым конкретным значениям (типу), например «Polymeric, Cord and Seat», выпадающий список 1 должен отображаться в форме form1 и заполняться некоторыми цветами, полученными из DB-

Считаете ли вы, что жесткое программирование этого условия является правильным решением? Если нет, каковы ваши предложения?

Ответы [ 5 ]

0 голосов
/ 28 января 2011

Как уже говорили другие, жесткое кодирование никогда не бывает хорошей идеей. Вы упомянули, что обращаетесь к базе данных по цветам, почему бы не иметь в базе данных простую таблицу поиска для сопоставлений кода / типа? Хотя это, вероятно, самое сложное решение, оно является наиболее надежным по ряду причин.

Если у вас есть только один веб-сервер и вам не нужно беспокоиться о репликации данных, вы можете просто внедрить сопоставления в файл XML и кэшировать файл в памяти по истечении скользящего срока.

0 голосов
/ 04 января 2011

Если вы уже используете логику, определяющую тип кода в textbox1, список можно включить как:

Сначала определите перечисление типов кода,


enum CodeType
{
    Polymeric,
    Cord,
    Seat
}

Затем включить / отключить список,


public void test()
{
    if (Enum.IsDefined(typeof(CodeType), textBox2.Text.Trim()))
    {
        listBox1.Enabled = true;
    }
    else
    {
        listBox1.Enabled = false;
    }

    //Alternative
    //listBox1.Enabled = Enum.IsDefined(typeof(CodeType), textBox2.Text.Trim());
}

Обратите внимание, что если список скрыт ранее, вам нужно изменить свойство Visible, а не свойство Enabled списка.

Если вы хотите избежать даже этого, вы можете переместить имена типов в файл настроек и затем прочитать их во время выполнения.

0 голосов
/ 04 января 2011

Такие жесткие правила никогда не подходят.

Я бы создал класс, похожий на

class Something
{
    public string Keyword;
    public string KeywordType;
    public List<string> ListOfItems;
}

Тогда я бы заполнил список Нечего из базы данных, XML-файла или чего-либо еще, неважно, что.

public List<Something> ListOfSomethings;

чтение из вашего хранилища данных и добавление каждого в список.

ListOfSomethings.Add(new Something("keyword","KeywordType",new List<String>{"Item1","Item2"});

Затем, когда они вводят что-то в textbox1, вы можете добавить или зациклить ListOfSomethings, чтобы найти нужный вам элемент, и установить для textbox2 значение Something.KeywordType , а затем , если число Something.ListOfItems > 0 затем добавьте элементы в выпадающий список и сделайте его видимым.

0 голосов
/ 04 января 2011

Все дело в окончательной сложности вашего проекта ... если это двухстраничный проект, в жестко заданном нет ничего плохого, если он только один раз и находится вдоступное место, которое может быть изменено не только вами, но и любым, кто возьмет этот проект в будущем.

например, в вашем классе помощников добавьте

public const string[] SearchTypes = new string[] { "polymeric", "cord", "seat" };

добавьте метод расширения, чтобы помочь вам

public static string ToJavaScriptArray(this string[] array) {
    string r = "";

    foreach(string s in array)
        r += String.Format("'{0}',", s);

    return r.TrimEnd(',');
}

, а затем в своем javascript на той конкретной странице, которую вы хотите, вы можете легко добавить

var searchTypes = new Array(<%= SearchTypes.ToJavaScriptArray() %>);

и использовать массив javascript в своем кодечтобы проверить, содержится ли «тип» в этом массиве, например

давайте добавим прототип, чтобы помочь нам

Array.prototype.has = function(obj) {
    return this.indexOf(obj) >= 0;
}

, затем

if( searchTypes.has( document.getElementById('textBox1').value ) { 
    // show dropdown        
}

надеюсь, это поможет.

0 голосов
/ 04 января 2011

Жесткое кодирование никогда не бывает хорошим, если то, что вы жестко кодируете, может быть изменено.

Например, вам нужно добавить новый тип, и вам нужно перестроить все.

Мое предложение: сделайте сопоставление между кодами и типами настраиваемыми, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...