у меня есть сервис 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);
}
Это дает мне псевдо функциональный стиль состава, который я люблю за этот вид задачи.
Моим окончательным вопросом является действительно одна из исправности / лучшие практики, таким образом, это, вероятно, слишком субъективно, однако я ценил бы возможность получить некоторую обратную связь независимо.
я намереваюсь переместить эти закрытые методы для общедоступного статического класса, так, чтобы они были легкодоступны для любого класса, который хочет сочинить сообщение для сервиса.
я также намереваюсь иметь различные функции сервиса, создали их сообщения определенным сообщением, создающим классы, для улучшенной пригодности для обслуживания.
это хороший способ реализовать этот простой DSL, или я пропускаю немного специального соуса, который позволит мне сделать это лучше?
вещью, которая приводит меня сомневаться, является то, что, как только я перемещаю эти методы в другой класс, я увеличиваю длину этих вызовов метода (конечно, я действительно все еще сохраняю начальную цель удаления последовательностей волшебства большого объема.) Я должен быть более обеспокоен размером (местоположение) класса языка DSL, чем я о краткости синтаксиса?
Примечание, что в этом экземпляре удаленный сервис плохо реализовал и не соответствует никаким общим стандартам обмена сообщениями, например, WSDL, SOAP, XML/RPC, WCF и т.д.
В тех случаях, очевидно, не было бы мудро создать созданные сообщения руки.
В редких случаях, где действительно необходимо иметь дело с сервисом как одно рассматриваемое здесь, и он не может быть повторно спроектирован по любой причине, ответы ниже предоставляют некоторым возможным способам иметь дело с ситуацией.