Когда лямбда в методе расширения делает слишком много?

Я понимаю, что это частично субъективно, но мне вообще любопытно мнение сообщества, и я не смог успешно найти существующий вопрос, который решает эту проблему.

Я в несколько религиозный спор с коллегой по поводу конкретного оператора Select в запросе L2EF.

.Select(r =>
{
    r.foo.Bar = r.bar;
    r.foo.Bar.BarType = r.Alpha;
    if (r.barAddress != null)
    {
        r.foo.Bar.Address = r.barAddress;
        r.foo.Bar.Address.State = r.BarState;
    }
    if (r.baz != null)
    {
        r.foo.Bar.Baz = r.baz;
        if (r.bazAddress != null)
        {
            r.foo.Bar.Baz.Address = r.bazAddress;
            r.foo.Bar.Baz.Address.State = r.BazState;
        }
    }
    return r.foo;
})

Предостережения:

  • Это Linq-to-Entities
  • Это после работы в базе данных как было выполнено и возвращено
  • Входной параметр r является анонимным

Лично я придерживаюсь мнения, что (а) предложение select не должно изменять значения, оно должно просто проецироваться. Его контраргумент в том, что он ничего не меняет, он '' s просто убедитесь, что все правильно инициализировано в результате запроса БД. Во-вторых, я думаю, что как только он начнет вдаваться в полные блоки кода и операторы возврата, пора будет определить метод или даже Func , а не делать все это встроенным. Сложность здесь снова заключается в том, что ввод анонимен, поэтому необходимо определить тип. Но, тем не менее, мы все еще обсуждаем общий вопрос, если не конкретный.

Итак, когда лямбда-выражение делает слишком много? Где вы рисуете нечеткую линию на песке?

7
задан Anthony Pegram 8 October 2010 в 15:19
поделиться