Какое исключение .Net 2.0 я должен выбросить в этом случае? - PullRequest
1 голос
/ 24 июня 2009

Я пишу еще одну реализацию ActiveRecord для компании, которая меньше боится моего кода, чем обозначение «Release Candidate» в реализации CastleProject. В любом случае, я использую атрибуты для каждого свойства в базовом классе, чтобы сопоставить их со столбцами возвращаемого набора данных:

[ResultColumnAttribute("CUST_FIRST_NAME")]
public string FirstName
        {
            get { return _columnName; }
            set { _columnName = value; }
        }

чтобы при создании экземпляра класса из набора данных я присвоил этому значению значение столбца. Какое исключение я должен выбросить, когда столбец сопоставлен с атрибутом, но не отображается в наборе данных? Я не хочу идти и писать собственный (ленивый), и я думаю, что Application.Exception немного невзрачный.

Ответы [ 6 ]

8 голосов
/ 24 июня 2009

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

Вот как бы я это написал:

[Serializable]
public class InvalidMappingException : Exception
{
    public InvalidMappingException() { }

    public InvalidMappingException(String message)
        : base(message) { }

    public InvalidMappingException
        (String message, Exception innerException)
            : base(message, innerException) { }

    protected InvalidMappingException
        (SerializationInfo info, StreamingContext context)
            : base(info, context) { }
}
2 голосов
/ 24 июня 2009

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

В противном случае встроенные исключения будут работать нормально.


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

1 голос
/ 24 июня 2009

Так как «выбросить новое исключение» теперь официально является плохим стилем и вышло из моды, я выбрасываю InvalidOperationException («описательное сообщение») для всех ошибок, для которых мне лень писать собственную ошибку.

1 голос
/ 24 июня 2009

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

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

0 голосов
/ 24 июня 2009

Согласился, что вы должны просто написать свой собственный (черт возьми, просто введите исключение и нажмите Tab, и редактор сделает 2/3 работы за вас!), Но если нет, я бы, вероятно, пошел с ArgumentException.

0 голосов
/ 24 июня 2009

Во-первых, Castle Windsor теперь официально является версией 2, нет версии для релиза:)

Я думаю, что в .NET Framework есть только ограниченный набор исключений, которые вы действительно можете выбросить из своего кода:

  • NotImplementedException
  • InvalidOperationException
  • ArgumentException
  • ArgumentNullException

может быть больше, я надеюсь на другие сообщения. Если ни один из них не подходит, вы должны написать свой собственный. С помощью фрагмента кода exc в Visual Studio ленивость не является аргументом.

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