Re: Посоветуйте с архитектурой. Обработчик XML запросов.
От: Ziaw Россия  
Дата: 20.06.10 17:03
Оценка: 6 (1)
Здравствуйте, ifndef, Вы писали:

I>Буду благодарен любым советам.


Совет — разделить данные и алгоритмы.

1. на входе мы имеем объекты десериализованные из XML, в чистом виде
2. пропускаем их через необходимые обработчики типа Preprocessor
3. прогоняем его через Validator
4. отправляем через Sender

Основной алгоритм будет примерно таким:

Request request = DeserializeRequest();

ItemVisitor preprocessor = factory.GetPreprocessor(request);
foreach (var item in request.Items)
  preprocessor.Visit(item)

ItemVisitor validator = factory.GetValidator(request);
foreach (var item in request.Items)
  validator.Visit(item)

// здесь как-то обрабатываем возможные ошибки валидации.

ItemVisitor sender = factory.GetSender(request);
foreach (var item in request.Items)
  sender.Visit(item)


Минусы — достаточно большое количество классов: AddPreprocessorVisitor, UpdatePreprocessorVisitor, etc (впрочем скорее всего их можно унаследовать от базового с небольшими отличиями).

Плюсы — везде очень простая и легко поддерживаемая логика.

Абстрактно хорошо бы еще использовать разные типы для XmlUserData->RequestUserData, но, зачастую, можно обойтись и одним.

XSLT для данного случая будет тем же визитором, только логику придется писать на другом языке, я бы не стал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.