В коде была найдена довольно неприятная проблема. Вот пример проблемного кода
GetSelectedObject() as Order
После того, как класс ордер перестал использоваться и стал использоваться другой класс, по всему коду стали возникать ошибки. Т.к. исключение не происходит, но в то же время и работает все неправильно. Проблема оказалась в том, что неправильное приведение типа превращалось в null значение переменной, которое вызывало проблемы (или необычное певедение) в других частях системы. Чтобы потом не выискивать все такие места рекомендую сделать слеющий рефаторинг:
Order GetSelectedOrder()
{
return (Order)GetSelectedObject();
}
Метод получение выделенного ордера использовать повсеместно. Если тип объекта поменяется сразу возникает исключение и исправлять придется в одном месте.
Примечания:
Оператор AS является довольно опасным. Т.к. может прятать настоящие ошибки и порождать совсем другие. Чаще всего NullReferenceException в других местах приложения, где их быть не должно. Я уже вижу возражения, что он быстрее чем оператор приведения типа (Cast). Так вот, хочу вас расстроить, последние версии .NET Framework хорошо улучшили скорость работы оператора приведения типов. Особого выигрыша от использования операбота AS вы не почувствуете.
Дальнейшим развитием идееи может служить добавление строго типизированного метода добавление элементров в коллекцию:
AddOrder(Order order)
{
AddObject(order)
}
При таком подходе будет трудно добавить объект неправильного типа в коллекцию.
Прячьте приведение типов внутрь метода!
Подписаться на:
Комментарии к сообщению (Atom)
Обо мне
Теги
- .NET (1)
- Лицензии (1)
- Anti-Patterns (16)
- ASP.NET (3)
- Bug fixes (1)
- C# (5)
- Code Review (4)
- Fun (1)
- Naming (1)
- Refactoring (20)
- Team rules (2)
- Web (2)
Архив
-
▼
2009
(22)
-
▼
мая
(18)
- Зачем нужен enum из двух объектов, если есть булев...
- Привязка к производителю
- Грибное управление
- Моральный риск
- Прячьте приведение типов внутрь метода!
- Бог-громовержец
- Эскалация обязательств
- Коллективное проектирование
- Дойная корова
- Паралич от анализа
- Методологические aнти-паттерны
- Анти-паттерны программирования
- Объектно-ориентированные анти-паттерны
- Анти-паттерны проектирования программного обеспечения
- Анти-паттерны анализа
- Анти-паттерны управления
- Организационные анти-паттерны
- Введение в анти-паттерны
-
▼
мая
(18)
0 коммент.:
Отправить комментарий