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