Здравствуйте, 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 для данного случая будет тем же визитором, только логику придется писать на другом языке, я бы не стал.