Новый технологии, как магнит притягивают внимание большого количества разработчиков. Мы любим изучать что-то новое, чтобы в разговоре с коллегами вставить новое модное словечко, раньше других изучить все тонкости той или иной технологии или повысить свою стоимость на рынке труда. Но помимо разработчиков, новые технологии привлекают и авторов, желающих прославиться или банально заработать деньги на этой самой новой технологии.
Не является исключением из этого правила и новая технология Майкрософт под названием Language Integrated Query (LINQ) призванная решить многие проблемы доступа к данным, которые возникают у разработчика в его повседневной деятельности. И в связи с огромным вниманием к этой технологии со стороны разработчиков, первая книга по LINQ, переведенная на русский язык, также будет крайне востребованной. В связи с этим хотелось бы знать стоит ли она потраченного времени и денег.
Для начала хотелось бы отметить тот факт, что сам автор в течение длительного времени хотел написать какую-либо книгу, но никак не мог выбрать для этого подходящую тему. Либо он слишком слабо разбирался в предмете, либо об этом уже было написано достаточно и не было смысла в появлении еще одной книге по данной тематике. И вот в 2005 году, узнав о работе Майкрософт над новой технологией, Джозеф Раттц пришел к выводу, что это именно то, что нужно. И не страшно, что он об этой технологии не имел ни малейшего понятия, главное, что о ней также не знал и никто другой. Итак, выбор пал на LINQ и спустя 17 месяцев плодотворной работы в ноябре 2007-го года одновременно с официальным выходом Visual Studio 2008 (а вместе с ней и технологии LINQ) в свет вышла книга с незамысловатым названием "Pro LINQ Language Integrated Query In C# 2008".
Книга состоит из 5 частей. В первой части автор рассматривает нововведения C# 3.0, без которых существование LINQ было бы невозможно. Эта тема достаточно избита, ей уделено большое количество внимания в различных источниках, поэтому сказать об этой части ничего нельзя, ни хорошего, ни плохого.
Часть 2 книги полностью посвящена LINQ to Objects. Помимо пространных рассуждений на тему доступа к данным, восхищением новыми возможностями и краткому обзору Query Expressions, основная доля этой части приходиться на описание методов расширения. Причем автор поставил перед собой цель описать каждую перегруженную версию каждого метода, и даже если методы практически ни чем не отличаются друг от друга, все равно им посвящается отдельный раздел с кратким описанием и примером использования. Примеры - это отдельная тема для разговора. Чтобы они были самодостаточными, каждый пример состоит из трех частей: получения тестовых данных (5-6 строк), запрос (1-2 строки), результаты (до 1 страницы). Сложив все это вместе, мы получаем более ста страниц текста, с надуманными примерами, несмешными шутками автора и отсутствием полноценной картины в голове у читателя. Эту сотню страниц, можно смело заменить одной нормальной статьей по LINQ to Objects и справкой Майкрософт.
Помимо этого, в тексте встречаются и откровенные "ляпы". Вот, например, автор указывает в одной из своих заметок, что операция OrderBy является нестабильной (unstable), в то время как операция ThenBy является стабильной (stable), хотя официальная документация Майкрософт придерживается несколько иного мнения (обе операции являются стабильными). Но более интересен не сам факт приведения неверного совета, а то, что я нашел на сайте Майкрософт обсуждение, в котором некий Джозеф Раттц обсуждает стабильность/нестабильность операции OrderBy с одним из сотрудников Майкрософт. И в рамках этого обсуждения, дается четкий ответ на то, что операция OrderBy является стабильной и почему поведение этой операции именно таково. Данное обсуждение датировано маем 2007 года, но, видимо, сроки давят не только на разработчиков программного обеспечения, но и на авторов книг, поэтому Джозеф Раттц не успел исправить эту досадную промашку к выходу книги в ноябре 2007 года.
Теперь перейдем к части 3 LINQ to XML. Эта часть написана в таком же стиле, как и предыдущая: немного теории, восхищение новой технологией, немного юмора (не всегда уместного) и подробное описание API функций с примерами применения. Примеры, опять же, надуманы и не пытаются раскрыть тему целиком, а всего лишь показывают применение единственной функции в очень ограниченном контексте. Глава 8 вообще не содержит никакой новой информации, а по сути, дублирует описание функций из предыдущей главы.
Четвертая часть книги LINQ to DataSet больше всего понравилась распространенным применением шаблонов написания кода типа Copy-Paste. Так, например, описание функций Distinct, Except, Intersect, Union и SequenceEqual занимают 10! страниц, причем многие абзацы отличаются друг от друга единственным словом (именем метода).
Наиболее крупной частью книги является часть 5, посвященная LINQ to SQL. И это не удивительно, ведь при описании этой технологии нужно объяснить суть объектно-реляционного отображения, роль сущностных классов, что такое DataContext, схемы и атрибуты, проблему параллелизма и многое другое. Автор рассматривает все эти темы, но делает это как-то скомкано и несколько сумбурно. Начинает объяснять одно, затрагивает другое, при этом откладывая детальное описание затронутой проблемы на потом. В этой части мне особенно понравилась глава, посвященная атрибутам. Автор приводит пример кода, который использует три атрибута и всего 7 свойств. После этого на 14 страницах следует описание всех атрибутов со всеми свойствами, без единого примера. И если некоторые атрибуты и свойства являются интуитивно понятными, то многие требуют дополнительного пояснения, которого, к сожалению, не наблюдается. И когда автор в конце главы, в резюме пишет о том, что он поздравляет читателя с тем, что он стал экспертом в области объектно-реляционного отображения, это не вызывает ничего кроме улыбки.
Так какой из этого следует вывод? Стоит приобретать эту книгу или нет?
Если на предприятии вашему отделу периодически выделяют средства для пополнения корпоративной библиотеки и все книги по интересующей технологии вы уже купили, то можно остановить выбор на этой книге. И даже если вам и вашим коллегам она не пригодиться, она будет отлично смотреться в книжном шкафу рядом с другими книгами этой серии. Но если речь идет о личной библиотеке - то я бы посоветовал воздержаться от подобного приобретения. Все же книга не оправдывает потраченные средства и личное время.