Re[22]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 15:39
Оценка:
Здравствуйте, IT, Вы писали:

L>>Вы правда-правда такие методы пишете или вы просто задались целью опровегнуть мое утверждение про анонимные типы?


IT>Мы пишем разные методы, но никогда при этом не руководствуемся тем, будет ли лучше ставить var перед получением значения из этого метода или полный тип.


И все-таки ответьте на вопрос, пишете ли вы такие методы?
Re[5]: Linq : неудачный маркетинг?
От: Mazay Россия  
Дата: 18.02.10 15:46
Оценка:
Здравствуйте, IT, Вы писали:

M>>О чём я имею "весьма смутное и отдалённое понятие"? О промышленной разработке "типичных" проектов? Не соглашусь. О LINQ? Пожалуй да. Ну дык в том виде в каком её подают я не вижу ей применения для своих задач. Ниже типичный пример использования LINQ. Вот скажите, вам в самом деле часто приходится работать с такими ArrayList'ами? Как правило же все эти данные лежат в БД и дергаются либо тем же SQL, либо HQL.


IT>[c#]

IT>public class Student
IT>{
IT> public int StudentID { get; set; }
...
IT> [Association(ThisKey = "StudentID", OtherKey = "StudentID")]
IT> public Score[] Scores { get; set; }
IT>}
...
IT>Генерируемый SQL (Sybase):

IT>
IT>SELECT
IT>    [student].[StudentID],
IT>    [student].[FirstName],
IT>    [student].[LastName]
IT>FROM
IT>    [Student] [student]
IT>WHERE
...
IT>    ) > 95
IT>

IT>Ещё вопросы?

То есть ЛИНК — это универсальный интерфейс для работы реляционными (БД), иерархическими (XML) данными и стандартными коллекциями в памяти. Так? Он позиционируется как замена XPath, ORM-библиотек, а также как удобная тулза для стандартных коллекций внутри программы на C#. Так? Ну тогда идея действительно масштабная и актуальная. Лишь бы баланс между логической стройностью , простотой и возможностями был приемлемым. Кстати, там под низом полноценный ORM-движок есть или всё просто на уровне запрос/ответ? Я имею ввиду разруливание циклических ссылок, кэширование, пакетное обновление, ленивую загрузку. Датасеты наконец сдохнут?
Главное гармония ...
Re[3]: Linq : неудачный маркетинг?
От: Mazay Россия  
Дата: 18.02.10 15:52
Оценка:
Здравствуйте, Dufrenite, Вы писали:

M>>Я в промышленном программировании уже 2 года как не появлялся, так что мои представления могут быть несколько устаревшими. Но если взять "типичный" проект с SQL БД, то действительно не очень понятно зачем мне ещё и LINQ. Ведь практически все объекты с которыми я работаю, лежат в БД и оттуда их можно спокойно выдернуть SQL запросом, который отработает на сервере, который всё соптимизирует, закэширует и т. д. Зачем мне самому держать коллекции, к которым потом обращаться через заново изобретенный SQL и не забывать синхронизировать с базой? Нет, конечно иногда приходится, но не так часто, и этого лучше избегать.


D>То, что вы хотите сказать вполне разумно, но. Не базой данных единой жив программист. Я не буду строить из себя мега-математика и эксперта по теории множеств, а скажу с точки зрения обычного разработчика. LINQ это мега удобно при работе с коллекциями. Например, там где обычно надо написать несколько вложенных циклов и задействовать несколько промежуточных переменных LINQ позволяет обойтись одним запросом или простой цепочкой вызовов (кому как нравится).

D>Код получается короче и понятней (проверено). Свободы больше: хочу циклы пишу, хочу запросы. Как проще и понятней получается тот способ и выбираю.

Вот меня тоже заинтересовала именно эта фишка. Я в последнее время пишу всякие числодробилки на С/С++ и мне такой инструмен был бы очень кстати. Потому я и удивился, что он появился именно в промышленном программировании (бизнес-приложений), где, насколько я помню, он не особо то нужен был.
Главное гармония ...
Re[23]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:53
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Вы правда-правда такие методы пишете или вы просто задались целью опровегнуть мое утверждение про анонимные типы?

IT>>Мы пишем разные методы, но никогда при этом не руководствуемся тем, будет ли лучше ставить var перед получением значения из этого метода или полный тип.
L>И все-таки ответьте на вопрос, пишете ли вы такие методы?

Всякие пишем. Я не вижу никаких проблем в написании методов с таким поведением. А в чём твоя проблема?
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 15:58
Оценка:
Здравствуйте, Mazay, Вы писали:

M>То есть ЛИНК — это универсальный интерфейс для работы реляционными (БД), иерархическими (XML) данными и стандартными коллекциями в памяти. Так?


Примерно.

M>Он позиционируется как замена XPath, ORM-библиотек, а также как удобная тулза для стандартных коллекций внутри программы на C#. Так?


Не замена, а скорее дополнение.

M>Ну тогда идея действительно масштабная и актуальная. Лишь бы баланс между логической стройностью , простотой и возможностями был приемлемым. Кстати, там под низом полноценный ORM-движок есть или всё просто на уровне запрос/ответ? Я имею ввиду разруливание циклических ссылок, кэширование, пакетное обновление, ленивую загрузку. Датасеты наконец сдохнут?


Это пример из BLToolkit, а он не позиционируется как тяжёлый ORM с полноценным Entity Service. Но можно взять тот же Entity Framework. В нём всё это есть.
Если нам не помогут, то мы тоже никого не пощадим.
Re[24]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 15:58
Оценка:
Здравствуйте, IT, Вы писали:

L>>И все-таки ответьте на вопрос, пишете ли вы такие методы?


IT> Всякие пишем. Я не вижу никаких проблем в написании методов с таким поведением.


А можно пример такого метода из жизни?
Re[11]: Linq : неудачный маркетинг?
От: Dufrenite Дания  
Дата: 18.02.10 16:00
Оценка: +1
Здравствуйте, Lloyd, Вы писали:

L>
L>var customers = GetCustomers()
L>

L>1. Что не так с названием переменой?
L>2. Какой тип у customers?

Если используем Visual Studio и надо узнать точный тип, то для этой цели есть контекстная подсказка. Мне лично хватает.
Если IDE нет, то пускаем пулю в лоб, меняем профессию или ищем объявление GetCustomers(). Как то так.
Re[12]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 16:05
Оценка:
Здравствуйте, Dufrenite, Вы писали:

L>>1. Что не так с названием переменой?

L>>2. Какой тип у customers?

D>Если используем Visual Studio и надо узнать точный тип, то для этой цели есть контекстная подсказка. Мне лично хватает.


В Visual Studio не везде есть подсказка: ее нет в Annotate, нет в diff-ах, stacktrace-ах, логах.

D>Если IDE нет, то пускаем пулю в лоб, меняем профессию или ищем объявление GetCustomers(). Как то так.


Это конечно ваш выбор, но я предпочитаю более гуманный вариант — указывать типы, там где они нужны/возможны.
Re[4]: Linq : неудачный маркетинг?
От: Dufrenite Дания  
Дата: 18.02.10 16:06
Оценка:
Здравствуйте, Mazay, Вы писали:

M>Вот меня тоже заинтересовала именно эта фишка. Я в последнее время пишу всякие числодробилки на С/С++ и мне такой инструмен был бы очень кстати.


Да, мне его тоже в C++ не хватает.

M>Потому я и удивился, что он появился именно в промышленном программировании (бизнес-приложений), где, насколько я помню, он не особо то нужен был.


Я бизнес приложениями не занимаюсь. Использую линк в редакторах игр и DSL компиляторах.
Хотя уверен, что в бизнес приложениях он тоже весьма удобен.
Re[25]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 16:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

IT>> Всякие пишем. Я не вижу никаких проблем в написании методов с таким поведением.

L>А можно пример такого метода из жизни?

Например, есть метод, который получает текстовый поток и дробит его на строки, на выходе IEnumerable<string>. Затем есть второй метод, который каждую строчку преобразует в массив строк, использую символ разделитель. На выходе IEnumrable<string[]>. Следующий метод валидирует данные и преобразует массив в некоторый тип. На выходе IEnumerable<T>. Сигнатура такого метода примерно такая:

IEnumerable<T> ValidateAndConvert<T>(this IEnumerable<string[]>, Func<string[]>,T>);
Если нам не помогут, то мы тоже никого не пощадим.
Re[26]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 16:21
Оценка:
Здравствуйте, IT, Вы писали:

IT>Например, есть метод, который получает текстовый поток и дробит его на строки, на выходе IEnumerable<string>. Затем есть второй метод, который каждую строчку преобразует в массив строк, использую символ разделитель. На выходе IEnumrable<string[]>. Следующий метод валидирует данные и преобразует массив в некоторый тип. На выходе IEnumerable<T>. Сигнатура такого метода примерно такая:


IT>
IT>IEnumerable<T> ValidateAndConvert<T>(this IEnumerable<string[]>, Func<string[]>,T>);
IT>


Не совсем понимаю, что этот код призван показать. Воткните вызов этого метода в код, приведенный мной выше, и ограбете некорректное поведение. В случае Linq2Sql-я буде еще хуже — он просто начнет по-честному фигачить кучу запросов в базу, тем самым запрятав проблему.
Re[27]: Linq : неудачный маркетинг?
От: IT Россия linq2db.com
Дата: 18.02.10 16:32
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Не совсем понимаю, что этот код призван показать. Воткните вызов этого метода в код, приведенный мной выше, и ограбете некорректное поведение. В случае Linq2Sql-я буде еще хуже — он просто начнет по-честному фигачить кучу запросов в базу, тем самым запрятав проблему.


Не огребём. Этот код не ходит в базу вообще. У тебя какое-то странное понимание IEnumerable. Если это IEnumerable, то он обязательно должен ходить в базу IList, между прочим тоже IEnumerable.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Linq : неудачный маркетинг?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 18.02.10 16:37
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Linq — хорошая штука, но неудачно подан. Ваши мнения?


Сравнительно сложен в изучении и понимании при том, что существующие методы решения таких задач всех устраивают.
Re[4]: Linq : неудачный маркетинг?
От: 0x7be СССР  
Дата: 18.02.10 16:51
Оценка:
Здравствуйте, Mazay, Вы писали:

M>Вот меня тоже заинтересовала именно эта фишка. Я в последнее время пишу всякие числодробилки на С/С++ и мне такой инструмен был бы очень кстати. Потому я и удивился, что он появился именно в промышленном программировании (бизнес-приложений), где, насколько я помню, он не особо то нужен был.

В STL есть близкие по духу решения. С поправкой на реалии С++
Re[28]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 16:52
Оценка: +1
Здравствуйте, IT, Вы писали:

L>>Не совсем понимаю, что этот код призван показать. Воткните вызов этого метода в код, приведенный мной выше, и ограбете некорректное поведение. В случае Linq2Sql-я буде еще хуже — он просто начнет по-честному фигачить кучу запросов в базу, тем самым запрятав проблему.


IT>Не огребём. Этот код не ходит в базу вообще.


Огребем. Если я понял тебя правильно, ты сцепляешь приведенные методы в цепочку и в конечном итоге у тебя будет происходить чтение stream-а. Если ты "прокрутил" последний enumerable до конца, то стрим у тебя будет спозизионирован на конец. Повторное чтение приведет либо к исключению, либо к пустой коллекции на выходе.

IT>У тебя какое-то странное понимание IEnumerable. Если это IEnumerable, то он обязательно должен ходить в базу


У меня нет такого понимания IEnumerable, не придумывай.
Re[2]: Linq : неудачный маркетинг?
От: 0x7be СССР  
Дата: 18.02.10 17:02
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Сравнительно сложен в изучении и понимании при том, что существующие методы решения таких задач всех устраивают.

Каких задач? Меня интересует твой взгляд.
Re[13]: Linq : неудачный маркетинг?
От: Dufrenite Дания  
Дата: 18.02.10 17:12
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>В Visual Studio не везде есть подсказка: ее нет в Annotate, нет в diff-ах, stacktrace-ах, логах.

L>Это конечно ваш выбор, но я предпочитаю более гуманный вариант — указывать типы, там где они нужны/возможны.

Согласен. Именно поэтому я говорил о контексте. Если из контекста тип переменной не очевиден, то лучше его явно указать.

Если вернуться к изначальному примеру.
Контекст может быть таким:
var customers = GetCustomers();
foreach (var customer in customers)
{
  Output(customer.Name);
}

Здесь не нужен микроскоп чтобы понять, что customers это как минимум IEnumerable<Customer>. В большинстве случаев этого будет достаточно.

Или так:
var customers = GetCustomers();
for (int i = 0; i < customers.Length; ++i)
{
  Output(customers[i].Name);
}

Отсюда очевидно, что customers это массив.

Еще один аргумент: много языков не имеют строгой типизации, однако их активно используют и отказываться не собираются.
Re[14]: Linq : неудачный маркетинг?
От: Lloyd Россия  
Дата: 18.02.10 17:17
Оценка: +1
Здравствуйте, Dufrenite, Вы писали:

D>Согласен. Именно поэтому я говорил о контексте. Если из контекста тип переменной не очевиден, то лучше его явно указать.


D>Если вернуться к изначальному примеру.

D>Контекст может быть таким:

Если вы попытаетесь продумать все контескты, то очень быстро захлебнетесь во множестве вариантов и правила выбора быстро станут очень сложными (а то и противоречивыми). Сложные правила — не работают.
Мое правило — простое и следовательно лучше.
Re[29]: Linq : неудачный маркетинг?
От: Dufrenite Дания  
Дата: 18.02.10 17:19
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Огребем. Если я понял тебя правильно, ты сцепляешь приведенные методы в цепочку и в конечном итоге у тебя будет происходить чтение stream-а. Если ты "прокрутил" последний enumerable до конца, то стрим у тебя будет спозизионирован на конец. Повторное чтение приведет либо к исключению, либо к пустой коллекции на выходе.


Влезу в ваш диалог. Ленивое поведение в данном случае является потенциально опасным. Лучше в стандарте кодирования явно прописать обязательное приведение результата запроса к коллекции (если в решении не требуется именно ленивость).
Re[5]: Linq : неудачный маркетинг?
От: Dufrenite Дания  
Дата: 18.02.10 17:22
Оценка: +1
Здравствуйте, 0x7be, Вы писали:

0>В STL есть близкие по духу решения. С поправкой на реалии С++


По духу да. Но с точки зрения автоматизации разница колоссальна. Были бы в С++ лямбды и замыкания вопросов бы не было а так
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.