Реализация DSL в C# для генерации зависящего от домена XML

у меня есть сервис HTTP/XML прежней версии, что я должен взаимодействовать с для различных функций в моем заявлении.

я должен создать широкий спектр сообщений запроса для сервиса, так чтобы избежать, чтобы много волшебных последовательностей разбросало код, я решил создать фрагменты xml XElement для создания элементарного DSL.

, Например.

Вместо...

new XElement("root", 
  new XElement("request",
    new XElement("messageData", ...)));

я предназначаюсь для использования:

Root( Request( MessageData(...) ) );

С Корнем, Запросом и MessageData (конечно, это в иллюстративных целях), определенный как статические методы, которым все делают что-то подобное:

private static XElement Root(params object[] content) 
{
    return new XElement("root", content);
}

Это дает мне псевдо функциональный стиль состава, который я люблю за этот вид задачи.

Моим окончательным вопросом является действительно одна из исправности / лучшие практики, таким образом, это, вероятно, слишком субъективно, однако я ценил бы возможность получить некоторую обратную связь независимо.

  1. я намереваюсь переместить эти закрытые методы для общедоступного статического класса, так, чтобы они были легкодоступны для любого класса, который хочет сочинить сообщение для сервиса.

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

это хороший способ реализовать этот простой DSL, или я пропускаю немного специального соуса, который позволит мне сделать это лучше?

вещью, которая приводит меня сомневаться, является то, что, как только я перемещаю эти методы в другой класс, я увеличиваю длину этих вызовов метода (конечно, я действительно все еще сохраняю начальную цель удаления последовательностей волшебства большого объема.) Я должен быть более обеспокоен размером (местоположение) класса языка DSL, чем я о краткости синтаксиса?

Протесты

Примечание, что в этом экземпляре удаленный сервис плохо реализовал и не соответствует никаким общим стандартам обмена сообщениями, например, WSDL, SOAP, XML/RPC, WCF и т.д.

В тех случаях, очевидно, не было бы мудро создать созданные сообщения руки.

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

6
задан ocodo 8 September 2011 в 03:50
поделиться