2014-03-12 5 views
1

У меня есть список объектов типа, которые получают значения из БД через Entity Framework. Если нулевой результирующий набор возвращается в нуль или как пустой список, как показано ниже:Должен ли я возвращать нулевой или пустой список?

private List<Order> _myOrders; 
    public List<Order> myOrder 
    { 
     get 
     { 
      return this._myOrders ?? new List<Order>(); 
     } 
     set 
     { 
      this._myOrders = value; 
     } 
    } 

Любой код обработки будет использовать счетчик() для таблицы, в отличие от теста «! = NULL»? Что считается лучшей практикой. Я подозреваю, что нужно пытаться управлять нулями в свойствах, иначе вы записываете нулевой тестовый код повсюду.

Мысли?

Спасибо.

+3

Посмотрите на это: http://stackoverflow.com/questions/1626597/should-functions-return-null-or-an-empty-object – pqvst

ответ

7

Я был бы склонен возвращать пустой список.

На концептуальном уровне null представляет неизвестный. В вашем случае заказы, связанные с клиентом, не являются неизвестными; скорее, заказов нет. Пустой список представляет это точно, в то время как значение null является неточным и может быть неоднозначным: «нулевые» заказы не означают никаких заказов или просто, что свойство заказов еще не заполнено?

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

+1

Спасибо за это. Очень проницательный. Просто посмотрел на другое SO на этом, и руководство по проектированию MS фактически рекомендует возвращать пустые списки, а не null. Итак, сегодня я чему-то научился! – SamJolly

1

Я не соглашусь с Беном; хотя у него есть хороший момент, основанный на общепринятых теориях. Хотя в обработке ошибок используется меньше ошибок, я предпочитаю использовать пустой список, потому что для меня это кажется бесполезным использованием ресурсов. Конечно, это очень предпочтительный сценарий. Опять же, это действительно основано на общем дизайне вашего приложения. Планируете ли вы что-либо делать с этим списком, независимо от того, что он пуст? Если это так, то null не будет способ пойти. Вы должны решить, может ли простая простая проверка .count() перевешивать лишние строки кода, которые вам нужно будет написать, чтобы проверить наличие null для сохранения ресурсов. Насколько много ресурсосбережения будет - что я не знаю. Учитывая, что вам нужно выполнить дополнительные проверки на нуль, вы торгуете память для циклов.

Возьмите то, что я говорю, с солью. Я программировал только год.

+0

Спасибо за комментарий. Интересный вопрос о ресурсах, но я думаю, что буду работать с руководством по разработке MS ... – SamJolly

+0

@SamJolly Согласен, Сэм. Я просто хотел представить другую точку зрения. От чтения руководств MS, Framework Design Guidelines 2nd Edition и http://stackoverflow.com/a/1970001/2006048, это довольно ясно, где мои знания. :) –

+0

Несмотря на то, что просто прочитал первый SO, есть много нулевых протоганистов! Почему я посмотрел! :) – SamJolly

Смежные вопросы