В течение довольно длительного времени мы поддерживали приложение, которое обрабатывает данные в форматах XML и JSON. Обычно поддержка заключается в исправлении дефектов и незначительном расширении функциональности, но иногда она также требует рефакторинга старого кода.
Рассмотрим, например, функцию
Эта функция отлично работала, но требования поменялись и теперь нам нужно:
В этой статье мы расскажем, как осуществить рефакторинг функции
Рассмотрим, например, функцию
getByPath
, которая извлекает элемент из XML дерева по его полному пути.import scala.xml.{Node => XmlNode}
def getByPath(path: List[String], root: XmlNode): Option[XmlNode] =
path match {
case name::names =>
for {
node1 <- root.child.find(_.label == name)
node2 <- getByPath(names, node1)
} yield node2
case _ => Some(root)
}
Эта функция отлично работала, но требования поменялись и теперь нам нужно:
- Извлекать данные из JSON и, возможно, других древоподобных структур, а не только из XML;
- Возвращать сообщение об ошибке, если данные не найдены.
В этой статье мы расскажем, как осуществить рефакторинг функции
getByPath
, чтобы она соответствовала новым требованиям.