Лучший способ вызывать методы на основе условий - PullRequest
0 голосов
/ 22 января 2019

У меня есть фрагмент кода, в котором я вызываю свою базу данных и возвращаю данные в форме DataReader. Это основано на параметрах, используется ли хранимый процесс для вызова или простой текст. Примерно так:

IDataReader dataReader = null;

if (commandType == CommandType.StoredProcedure)
{
   dataReader = GetReaderByProc(proc, parameters);
}
else if (commandType == CommandType.Text)
{
   dataReader = GetReaderByText(text);
}

, где commandType равно System.Data.CommandType

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

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

1 Ответ

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

Вы можете использовать dictionary для удержания клавиши (commandType) и значения различных Func<>, а затем просто получить func с помощью клавиши и выполнить его.

      public static Dictionary < string, Func<string, parameters, IDataReader> dbMethods = 
                           new Dictionary<string, Func<string, parameters, IDataReader>();

         public static void CreateMethodDictionary()
         {                
            dbMethods.Add(CommandType.StoredProcedure, GetReaderByProc);
            dbMethods.Add(CommandType.Text, GetReaderByText);
         }

И тогда вы можете вызвать его как:

IDataReader dataReader = dbMethods[commandType].Invoke(proc, parameters);

Это предполагает, что обе ваши вызывающие функции принимают одни и те же параметры (что в настоящее время не так) и возвращают один и тот же объект.

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

...