Шаблон программирования или стиль кодирования с несколькими переключателями if / - PullRequest
3 голосов
/ 22 января 2012

У меня есть таблица с некоторыми идентификаторами, и я хочу в default.aspx открыть определенную страницу .aspx с формой, в зависимости от идентификатора.

Что у меня сейчас есть:

if(id_table ==1) {
response.redirect("PageBla.aspx");
}

if(id_table==2) {
response.redirect("Page21231.aspx");
}

if(id_table==6) {
....
}
 etc etc....

это просто, если у меня есть небольшое количество идентификаторов для проверки. Но я буду иметь десятки идентификаторов, чтобы проверить. Есть ли какой-либо шаблон программирования или любой другой способ сделать это без десятков ifs или switch / case?

Заранее спасибо

РЕДАКТИРОВАТЬ: "=" был заменен на "==".

Ответы [ 6 ]

5 голосов
/ 22 января 2012

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

Вы можете объявить поиск как поле:

private static readonly Dictionary<int, string> redirectLookup = new Dictionary<int,string> {
    {1, "PageBla.aspx"},
    {2, "Page21231.aspx"},
    // .....
    {6, "somepage6.apx"}

};

А в вашей логике перенаправления:

string redirect;
if (redirectLookup.TryGetValue(id_table, out redirect)) 
    Response.Redirect(redirect);
else
    // some default action when that ID was not mapped.
5 голосов
/ 22 января 2012

Просто создайте простой массив URL, например:

string[] urls = {"PageBla.aspx", "Page21231.aspx"};
response.redirect(urls[id_table]);

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

  1. Ваши таблицы будут иметь строковые идентификаторы.
  2. Ваш код перенаправления будет таким простым:

    Response.Redirect(tableId + ".asxp");
    
3 голосов
/ 22 января 2012

Используйте Dictionary<K,V>, вместо этого, например, больше или меньше, псевдокод :

var dic = new Dictionary<int, string> { {1, "PageBla.aspx"}, {2, "Page21231.aspx"}..}

и после в коде:

 response.redirect(dic[id_table]);
1 голос
/ 22 января 2012

Хранить ссылки в словаре:

    Dictionary<int, string> links = 
        new Dictionary<int, string>()
    {
        { 1, "One.aspx" },
        { 2, "Two.aspx" },
        { 3, "Three.aspx" }
    };

и используйте подобное:

    Response.Redirect(links[id_table]);
1 голос
/ 22 января 2012

вы можете использовать шаблон проектирования фабрики , который не сокращает операторы ifs, но инкапсулирует его.

Обновление

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

0 голосов
/ 22 января 2012

Другой вариант - сохранить страницу в таблице, выбрать страницу для перенаправления.

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