За и против LINQ (интегрированный языком запрос)

Вы можете вызвать JFrame.setLocationRelativeTo(null) , чтобы центрировать окно. Обязательно установите это перед JFrame.setVisible(true)

26
задан George Stocker 28 November 2008 в 13:48
поделиться

5 ответов

Я - крупный поклонник LINQ - хотя это нужно сохранить в перспективе и не рассматривать как серебряную пулю.

Профессионалы:

  • Декларативный подход делает запросы легче понять и более компактный
  • , Расширяемость и деревья выражений позволяют главным образом последовательные запросы многочисленных источников
  • , Даже незавершенные запросы могут быть реализованы способами кроме LINQ к Объектам - например, Параллельного LINQ и моего собственного Нажатия платформа LINQ. Очень гибкий.
  • Неправдоподобно полезный для незавершенных запросов, где является самым легким понять
  • Большой быть в состоянии избежать SQL в строках и т.д.
  • , Широкий спектр операторов, обеспеченных по умолчанию, и другие, может легко быть добавлен для LINQ к Объектам
  • , функции Language, представленные, прежде всего, для LINQ, широко применимы в другом месте (yay для лямбд)

Недостатки:

  • выражения Запроса не поняты достаточно хорошо и злоупотребляются. Часто вызов простого метода короче и более прост.
  • Неизбежные несоответствия между поставщиком - несоответствие импеданса все еще присутствует, который разумен, но должен быть понят
  • всегда будут некоторые вещи, которые можно сделать в SQL, но не в LINQ
  • , не понимая то, что продолжается, легко записать очень неэффективный код
  • , трудно записать поставщику LINQ. Это может быть неизбежно, но больше руководства от Microsoft ценилось бы.
  • Это - новый образ мыслей о доступе к данным для большинства разработчиков и будет требоваться время для понимания для проникновения
  • Не конкретно LINQ, но связанный с ним - способ, которым методы расширения обнаружены в C#, не достаточно детализирован
  • , операторы Some "отсутствуют", особенно эквиваленты OrderBy для вещей кроме упорядочивания - например, нахождение объекта с максимальным значением свойства
  • , Задержанное выполнение и потоковая передача плохо поняты (но улучшающийся)
  • , Отладка может быть очень хитрой из-за задержанного выполнения и потоковой передачи
  • В некоторых конкретных случаях, LINQ может быть значительно медленнее, чем ручной код. Чем лучше Вы понимаете внутренние работы, тем лучше Вы будете в состоянии предсказать это. (И конечно, если производительность важна для Вас, у Вас должны быть соответствующие тесты вокруг этого.)

я нахожу, что это является лучшим при контакте с незавершенными запросами. Их легко предсказать, понять и расшириться. Дополнительные технологии как LINQ к XML и Параллельный LINQ являются большими. LINQ к Объектам может использоваться почти где угодно.

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

32
ответ дан Jon Skeet 19 July 2019 в 06:07
поделиться

Моя любимая часть: использование их для упрощения модульных тестов записи. Также цепочки IEnumerable убедили меня записать более быстрые интерфейсы в своем коде.

Недостатки: Лямбды и дополнительные методы являются моими молотками, и всеми проблемами являются гвозди.

В целом: вдохнувший новую жизнь программирование в C# для меня.

3
ответ дан cfeduke 19 July 2019 в 06:07
поделиться

Существует проблема с ними подлых исключений из блоков выгоды попытки посредством задержанного выполнения.

, например:

var l = new List<int>() {1, 2, 3};
try
{
    l.Select(x => x / 0);
}
catch
{
    // error
}

l.elementAt(0); // exception occurs here outside of the try catch

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

Иначе я нахожу их невероятно полезными и очень экономящими время.

1
ответ дан Toby 19 July 2019 в 06:07
поделиться

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

я попытался использовать LINQ для SQL только что, но нашел его недостаточно мощным и неуклюжим. В особенности я не мог привести себя для использования разработчика класса Базы данных SQL. Возможно, это действительно дает intellisense на базе данных, но кому нужен он, когда у Вас есть SQL?

Позволяют мне сказать Вам, хотя, это - конечно, хорошая идея узнать больше о LINQ, поскольку приложения в будущем должны только увеличиться.

1
ответ дан Cyril Gupta 19 July 2019 в 06:07
поделиться

Pro:

Con:

  • Как любая новая технология слишком много людей не понимают его, но все еще используют его

@Jon Стрельба по тарелочкам - другой большой ответ, Вы крадете гром everyones: P. Я полностью соглашаюсь о том, как трудно запись поставщика, я нахожусь в процессе ее в данный момент! Действительно ли Вы знакомы с Bart Де-Смет? У него есть партия хороших примеров выполнения так.

0
ответ дан Aaron Powell 19 July 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: