Поделиться через


Функциональное и процедурное программирование (LINQ to XML)

XML-приложения имеют самые разнообразные типы.

  • Некоторые приложения принимают исходные XML-документы и представляют новые XML-документы в новой форме, отличной от формы исходных документов.
  • Некоторые приложения принимают исходные XML-документы и представляют документы совершенно в другом формате, например в виде кода HTML или текстовых файлов CSV.
  • Некоторые приложения принимают исходные XML-документы и вставляют записи в базу данных.
  • Некоторые приложения принимают данные из другого источника, например из базы данных, и создают из них XML-документы.

Это не все типы XML-приложений, но это репрезентативный набор типов функций, которые должен реализовать программист XML.

При всем разнообразии типов приложений существуют только два противоположных подхода, которыми может воспользоваться разработчик:

  • функциональное построение с использованием декларативного стиля;
  • модификация XML-дерева в оперативной памяти с использованием процедурного кода.

LINQ to XML поддерживает оба подхода.

При использовании функционального подхода вы должны написать преобразования исходных документов, чтобы получить совершенно новые документы нужного формата.

При изменении XML-дерева на месте вы должны написать код, который прослеживает узлы находящегося в памяти XML-дерева и переходит по ним, по мере необходимости вставляя, удаляя и изменяя узлы.

LINQ to XML можно использовать в обоих подходах. Используются одни и те же классы, а в некоторых случаях и одинаковые методы. Однако структура и цели двух подходов отличаются. Например, в разных ситуациях один из них часто оказывается производительнее другого и использует больше или меньше памяти. Кроме того, код на основе одного или другого подхода легче писать, а сам код является более простым в обслуживании.

Чтобы увидеть контрастность двух подходов, см . изменение дерева XML в памяти и функциональное построение.

Руководство по написанию функциональных преобразований см. в статье "Общие сведения о чистых функциональных преобразованиях".