Linq для JavaScript против стандартных методов - PullRequest
0 голосов
/ 24 февраля 2012

Я архитектор команды разработчиков программного обеспечения. Я создал значительную часть веб-элементов управления и инструментов для нас, используя ASP.NET и JavaScript / jQuery.

Часть инструментария является функциональным эквивалентом методов .NET для IEnumerable LINQ (где, выберите и т. Д.) Для массивов JavaScript. Я был удивлен, насколько просто это реализовать с помощью функции прототипа js. Я надеялся, что наши разработчики смогут эффективно использовать свои знания о LINQ на стороне клиента, и результаты пока были отличными.

Как я обнаружил сегодня, есть только одна загвоздка: уже есть несколько функционально идентичных методов с JavaScript 1.6. Это фильтр, карта, некоторые и каждый, соответствующие LINQ, где, выберите, любой и все методы, соответственно.

Они не поддерживаются в IE8 или более ранних версиях (что может объяснить, почему я о них не слышал), но просто обеспечить реализацию, чтобы они работали в кросс-браузерном режиме. Обратите внимание, что существуют десятки методов LINQ, которые не имеют собственного эквивалента, таких как sum, max, avg, groupBy и т. Д.

У меня такой вопрос: как моя команда разработчиков должна устранить это несоответствие? Я думаю, у нас есть три варианта:

1 - игнорировать нативные методы JavaScript (или использовать их внутренне в сквозном методе) и использовать только методы LINQ. Запретите использование нативных методов, чтобы наша кодовая база была самосогласованной.

2 - Используйте собственные методы JavaScript, когда это применимо, и методы LINQ, когда нет аналога.

3 - разрешить использование любого из них.

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

Какой из них вы бы выбрали и почему? Есть ли другая альтернатива, которую я не рассматриваю?

Дополнительный вопрос: jQuery не имеет ни собственных функций, ни функций LINQ. Какие имена методов должны использовать мои расширения jQuery?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Я бы выбрал № 1 из трех, которые вы предоставили, потому что я ценю согласованность, а также потому, что она позволяет вам предоставить запасной вариант, если метод недоступен изначально.

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

0 голосов
/ 11 июня 2019

Вы можете попробовать manipula пакет, который реализует все методы C # LINQ и сохраняет его синтаксис: https://github.com/litichevskiydv/manipula

https://www.npmjs.com/package/manipula

...