Возвращает объект словаря имея пару ключ/значение ключевых слов и URL-адресов


Можете вы пожалуйста помочь мне разделить этот метод, чтобы повторно использовать повторяющийся код?

Любые советы/замечания по коду приветствуются.

//This method will return Dictionary object having key/value pair of keywords and URLs.

//Keywords are  single word or bunch of words from db.

//Value in dictionary is URLs against each key (keyword).

//Code starts from here.

private static Dictionary<string, string> GetKeywordsAndEntityWithURL(int eventTypeId, string entityName)
{
    // Get initial url from configuration file.
    string basewebUrl = CommonMethods.GetAppSettingsValue("Baseweb");

    // Get all keywords from db, from KeyWords table.
    KeywordsCollection keyWords = KeywordsEntity.GetKeywords(null, eventTypeId);

    // This text will be concatenated with entityname.
    // Purpose of this is to avoid replacement of EntityName again in find/replace.
    string dummyText = "TemporaryText";

    // This object will be used to create key/value pair of keys and URLs.
    Dictionary<string, string> keyWordsWithURLs = new Dictionary<string, string>();

    // There are two types of keywords in db, Singular and Plural. Get each and create key/value using them.
    foreach (KeywordsEntity keyWord in keyWords)
    {
    string singularKeyword = keyWord.Keyword;

    // Keywords are like 'stag do' in db we need to replace white space
    // with hyphen to use this in URLs.
    singularKeyword = singularKeyword.Replace(' ', '-');

    // This key is like 'stag do London'.
    string singularKey = string.Empty;
    singularKey = string.Format("{0} {1}", keyWord.Keyword.ToString(), entityName);

    // Concat entityName (London) with dummytext.
    entityName = entityName + dummyText;

    // Text of URL e.g. stag do London
    string urlText = keyWord.Keyword + " " + entityName;

    // This value is like initial url (whatever it is in config file)/stag-do/london
    string singularValue = string.Empty;
    singularValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", singularKeyword, entityName, urlText);

    // Add key/value in dictionaly.
    keyWordsWithURLs.Add(singularKey, singularValue);

    // Plural keywords are like 'stag dos' in db we need to replace space with hyphen for URLs.
    string pluralKeyword = keyWord.PluralKeyword;
    pluralKeyword = pluralKeyword.Replace(' ', '-');

    // This key would be 'stag dos london'
    string pluralKey = string.Empty;
    pluralKey = string.Format("{0} {1}", keyWord.PluralKeyword.ToString(), entityName);

    // URL would be, initial url(whatever in config file)/ stag-dos/london
    string pluralValue = string.Empty;
    pluralValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", pluralKeyword, entityName, urlText);

    // Add key/value in dictionary.
    keyWordsWithURLs.Add(pluralKey, pluralValue);

    // Singular Key = London stag do
    singularKey = string.Format("{0} {1}", entityName, keyWord.Keyword.ToString());

    // Text of anchor e.g. London stag do.
    urlText = entityName + dummyText + " " + keyWord.Keyword;

    // Singular Value = /stag-do/london
    singularValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", singularKeyword, entityName, urlText);

    keyWordsWithURLs.Add(singularKey, singularValue);

    // Plural Key = London stag dos
    pluralKey = string.Format("{0} {1}", entityName, keyWord.PluralKeyword.ToString());

    // Plural Key = /stag-dos/lonon
    pluralValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", pluralKeyword, entityName, urlText);

    // Add key/value pair in dictionary.
    keyWordsWithURLs.Add(pluralKey, pluralValue);

    urlText = keyWord.Keyword + " in " + entityName + dummyText;

    singularKey = string.Format("{0} {1} {2}", keyWord.Keyword.ToString(), "in", entityName);
    singularValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", singularKeyword, entityName, urlText);

    // Add key/value in dictionaly.
    keyWordsWithURLs.Add(singularKey, singularValue);

    pluralKey = string.Format("{0} {1} {2}", keyWord.PluralKeyword.ToString(), "in", entityName);
    pluralValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", pluralKeyword, entityName, urlText);

    // Add key/value in dictionary.
    keyWordsWithURLs.Add(pluralKey, pluralValue);

    if (keyWord.IsDefault)
    {
        pluralKeyword = keyWord.PluralKeyword.Replace(' ', '-');

        pluralKey = string.Format("{0}", entityName);
        pluralValue = string.Format("<a style='text-decoration:underline;' href='" + basewebUrl + "/{0}/{1}'>{2}</a>", pluralKeyword, entityName, entityName);

        keyWordsWithURLs.Add(pluralKey, pluralValue);
    }
    }


    return keyWordsWithURLs;
}

Если вам нужен полный класс, пожалуйста, напишите комментарий. Я буду загружать его.



1113
5
задан 5 мая 2011 в 06:05 Источник Поделиться
Комментарии
1 ответ

Я бы, наверное, начать с очистки метода, прежде чем пытаться извлечь что-нибудь, как это сделает его легче увидеть, где нужно рисовать линии.


  • Есть несколько мест, где можно определить переменную с начальным значением и затем переопределить это значение на следующей строке (singularKeyword, singularKey)

    string singularKeyword = keyWord.Keyword.singularKeyword.Replace(' ', '-');
    string singularKey = string.Format("{0} {1}", keyWord.Keyword.ToString(), entityName);

  • Вам не нужно вызов toString в строку как строку.Формат() сделает это за вас.

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

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

  • Почему передать строковый литерал в строке.Формате вместо того, чтобы включать его в строке формата?

    singularKey = string.Format("{0} in {1}", keyWord.Keyword.ToString(), entityName);

  • Я заметил, что в нескольких местах добавить basewebUrl непосредственно форматную строку, вместо передачи его в качестве еще одного аргумента?

  • Всю строку.Формат вызова в этом следующая строка кажется немного излишним.

    pluralKey = string.Format("{0}", entityName);

    Почему бы просто не установить pluralKey в имя_сущности.

    pluralKey = entityName;

  • pluralKey установлен, но не используется, Используется только pluralKeyword.

  • Я, наверное, буду наказан за это, но я думаю, что вы перестарались некоторые комментарии.

    например.

    //Code starts from here.

    // Add key/value in dictionary.

    Лично я считаю такого рода комментирование более отвлекающим, чем полезным. :)


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


  • Каждая итерация добавляет еще одну копию dummyText в имя_сущности.

  • При добавлении к имя_сущности предназначен, это также должно происходить между первой и второй использовать в цикле?

3
ответ дан 5 мая 2011 в 11:05 Источник Поделиться