Нужна помощь в выборе шаблона дизайна - PullRequest
3 голосов
/ 17 марта 2011

В настоящее время у меня есть куча операторов if else для установки CategoryId на основе количества элементов в каждой коллекции.

Например,

public class TeamWork
{
    public string EmployeeName { get; set; }
    public int CategoryId { get; set; }
}

public class BLL
{
    public void SetCategoryId(ICollection<TeamWork> Converted, ICollection<TeamWork> Sourced)
    {
        if (Converted.Count == 1 && Sourced.Count == 1)
        {                
            if (String.Compare(Sourced.First().EmployeeName, Converted.First().EmployeeName) == 0)
            {
                // set category id to 1
                Converted.First().CategoryId = 1;
                Sourced.First().CategoryId = 1;                                            
            }
            else
            {
                // set category id to something                  
            }
        }
        else if (Sourced.Rows.Count == 1 && Converted.Rows.Count > 1)
        {
            // set category id to something           
        }
        // more if else statements...
    }
}

Я думаю, что есть лучший способ сделать это, возможно, с помощью некоторого шаблона проектирования. Какие-либо предложения? Спасибо!

Ответы [ 2 ]

4 голосов
/ 17 марта 2011

Цепочка ответственности - путь.

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

1 голос
/ 17 марта 2011

Шаблон стратегии приходит на ум. Попробуйте разбить эти правила на серию «если это условие истинно, тогда идентификатор категории это». Сделайте каждый из них методом, затем добавьте эти методы в качестве делегатов в List<Func<ICollection<TeamWork>, ICollection<TeamWork>, bool>> или сопоставимую индексированную коллекцию. Тогда ваш код SetCategoryId () выглядит так:

public void SetCategoryId(ICollection<TeamWork> Converted, ICollection<TeamWork> Sourced)
{
    foreach(var categoryRule in CategoryRules)
    {
       var category = test(Converted, Sourced);
       if(category != 0)
       {
          Converted.First().CategoryId = Sourced.First().CategoryId = category;
          break;
       }
    }
}

Приведенный выше код никогда не будет изменяться независимо от того, сколько правил вы добавили или удалили. Однако, если у вас есть структура if - else if, ваша серия правил, вероятно, будет зависеть от порядка, поэтому будьте осторожны при настройке правил в списке.

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