Каков наилучший способ документировать вызовы метода чтения данных? [закрыто]

StackOverflow https://stackoverflow.com/questions/439175

Вопрос

При работе с пространствами имен, такими как System.Data.Odbc или System.Data.OracleClient, различные методы чтения данных обычно требуют, чтобы целое число, соответствующее столбцу, было предоставлено функциям (например, OracleDataReader.GetInt32 ).

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

// Option One - Just provide the integer value
string myString = oraData.GetString[0];

// Option Two - Provide the integer value using a constant
string myString = oraData.GetString[FIELD_NAME];

// Option Three - Provide the column name and use System.Convert to return the correct value
string myString = Convert.ToString(oraData["Field_Name"]);

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

Это было полезно?

Решение

Я согласен с Эндрю Хэром, с тем дополнением, что я включил функциональность в перегруженный метод расширения, который упрощает операцию:

public static string GetStringByName(this OracleDataReader reader, 
                                     string columnName, 
                                     string defaultValue)
{
   string result = defaultValue;
   int columnIndex = reader.GetOrdinal(columnName);
   if(!reader.IsDbNull(columnName)
   {
      result = (string) reader.GetString(columnIndex);
   }
   return result;
}

В любом случае, просто рефакторинг, который мне очень помог.

Другие советы

Я всегда делал это так:

int columnIndex = dataReader.GetOrdinal("field");

if (!dataReader.IsDBNull(columnIndex))
    String myString = dataReader.GetString(columnIndex);

Идея заключается в том, что GetOrdinal завершится с ошибкой IndexOutOfRangeException , когда я попытаюсь получить поле, которого нет в читателе. Я хочу это исключение, потому что оно быстро сообщает мне, что между моим кодом и моей БД существует несоответствие.

Кроме того, GetOrdinal гораздо менее хрупок, чем жесткое кодирование самого ординала как магического числа.

Обычно я использую вариант 3. Мне он нравится, потому что, если базовый запрос когда-либо изменит порядок столбцов, он все равно будет работать, и в нем будет отображаться имя того, что вы просите, а не какое-то магическое число.

Однако я часто использую VB.Net, поэтому часть Convert.ToString () может быть сделана неявно. Типы C # могут иметь разные предпочтения.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top