Сравнение функционального и процедурного программирования (LINQ to XML)
XML-приложения имеют самые разнообразные типы.
Некоторые приложения принимают исходные XML-документы и представляют новые XML-документы в новой форме, отличной от формы исходных документов.
Некоторые приложения принимают исходные XML-документы и представляют документы совершенно в другом формате, например в виде кода HTML или текстовых файлов CSV.
Некоторые приложения принимают исходные XML-документы и вставляют записи в базу данных.
Некоторые приложения принимают данные из другого источника, например из базы данных, и создают из них XML-документы.
Это не все типы XML-приложений, а лишь представительный набор тех типов, которые приходится создавать программисту, работающему с кодом XML.
При всем разнообразии типов приложений существуют только два противоположных подхода, которыми может воспользоваться разработчик:
функциональное построение с использованием декларативного стиля;
модификация XML-дерева в оперативной памяти с использованием процедурного кода.
LINQ to XML поддерживает оба подхода.
При использовании функционального подхода вы должны написать преобразования исходных документов, чтобы получить совершенно новые документы нужного формата.
При изменении XML-дерева на месте вы должны написать код, который прослеживает узлы находящегося в памяти XML-дерева и переходит по ним, по мере необходимости вставляя, удаляя и изменяя узлы.
LINQ to XML можно использовать в обоих подходах. Используются одни и те же классы, а в некоторых случаях и одинаковые методы. Но организация и цели этих двух подходов существенно различаются. Например, в разных ситуациях один из них часто оказывается производительнее другого и использует больше или меньше памяти. Кроме того, код на основе одного или другого подхода легче писать, а сам код является более простым в обслуживании.
Сравнение этих двух подходов см. в разделе Сравнение изменения XML-дерева в памяти с функциональным построением (LINQ to XML).
Учебник по написанию функциональных преобразований см. в разделе Чистые функциональные преобразования XML.