ОО Дизайн - Сократить длинный список методов - PullRequest
2 голосов
/ 05 мая 2010

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

public class EmployeeLoader()  
{ 
   public void LoadEmpoyees()
   {...}

   public void LoadSalaries()
   {...}

   public void LoadRegistrationData()
   {...}    

   public void LoadTaxData()
   {...}
}

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

Ответы [ 6 ]

3 голосов
/ 05 мая 2010

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

3 голосов
/ 05 мая 2010

На самом деле, разбить его на хорошо названные шаги, как это, очень легко для чтения.

См. Эту статью: http://www.codinghorror.com/blog/2008/07/coding-without-comments.html

1 голос
/ 05 мая 2010

Отдельное их разделение делает его более удобочитаемым, чем метод загрузки с большим количеством шаблонов для управления различными сценариями

У вас было бы что-то вроде

public void Load() {
  if (condition1 that makes me know I'm loading an employee) {
    //whatever applies to this condition
  }
  if (condition2 that makes me know I'm loading salaries) {
    //whatever applies to this condition
  }
  if (condition3 that makes me know I'm loading registrationData) {
    //whatever applies to this condition
  }
  if (condition4 that makes me know I'm loading taxData) {
    //whatever applies to this condition
  }
}

Тьфу.

Даже если методы делают очень похожие вещи, было бы неплохо разделить их и вызвать похожие методы. Таким образом, если что-то изменится, это будет простой рефакторинг =).

Наконец, если класс становится слишком большим (слишком много обязанностей), вы можете рассмотреть возможность разбить его на несколько классов с более конкретными обязанностями.

0 голосов
/ 10 апреля 2012

В зависимости от реализации вы можете сжать их в один метод Load или, по крайней мере, меньшее количество методов загрузки. Вместо многих методов LoadX () он может стать одним или несколькими методами Load (X x)? например:

public class EmployeeLoader()  
{ 
   public void Load(string pTableName)
   {...}
}
0 голосов
/ 05 мая 2010

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

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

public class EmployeeLoader
{

    private List<String> _Employees = null;
    public List<String> Employees
    {
        get
        {
            if (_Employees == null)
            {
                LoadEmployees();
            }
            return _Employees;
        }
    }

    private void LoadEmployees()
    {
        //Load Data
    }
}

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

0 голосов
/ 05 мая 2010

Как насчет одной точки воздействия на пользователя, называемой «Load ()», этот метод может принимать аргумент enum, указывающий, что он хочет загрузить, а затем под прикрытием вы можете иметь столько методов, сколько вам нужно. / хочу реализовать этот внешний открытый вызов.

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