parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

На лицо серьезные ошибки в проектировании...

Sumo 22.07.2006 23:18 / 22.07.2006 23:22

Делать класс, который одновременно подменяет xdoc и делает некие XML-RPC запросы не стоило - оптимальнее сделать класс, который реализует передачу запросов, получение ответов удаленному серверу, при этом в качестве response/request использовать именно xdoc-объекты (возможно имеет смысл сделать наследников от базового класса, если нужно что-то добавить в интерфейс xdoc-xnode).

А если учитывать, что RPC - это не более, чем Вызов Удаленных Процедур, то вполне можно было реализовать именно этот самый вызов. Т.е. делаем базовы класс RPC-сервер, который имеет интерфейс для парсинга запроса, автоматической передачи их своим методам и обработки, при необходимости, ошибок (нарпимер, если не реализован метод). Дальше мы просто наследуемся от этого базового класса (назвать его, например, XMLRPCServer) И получаем примерно такую штуку:
@CLASS
MyXMLRPCServer

@BASE
XMLRPCServer

@create[request]
  ^BASE:create[request]

@method1[params]
  Что-то тут...

@method2[params]
  И еще что-то
и далее основная программа сводится к следующему
  $server[^MyXMLRPCServer::create[$request:body]]
  $response:body[^server.process[]]
Метод XMLRPCServer.process реализует как раз все, что нам и нужно... Уверен, что это будет и универсальнее и полезнее. :)

Наверняка это можно реализовать очень изящно: просто сделать XSLT-преобразование входного XML'я в код на парсере и вкомпилировать его в класс XMLRPCServer прямо на лету.