У меня есть устаревшая служба HTTP / XML, с которой мне нужно взаимодействовать для различных функций моего приложения.
Мне нужно создать широкий спектр сообщений-запросов для службы, поэтому, чтобы избежать большого количества магических строк, разбросанных по коду, я решил создать xml XElement
фрагменты для создания элементарного DSL.
Например.
Вместо ...
new XElement("root",
new XElement("request",
new XElement("messageData", ...)));
Я собираюсь использовать:
Root( Request( MessageData(...) ) );
С Root, Request и MessageData (конечно, они для иллюстративных целей) определены как статические методы, которые все делают что-то похожее на:
private static XElement Root(params object[] content)
{
return new XElement("root", content);
}
Это дает мне псевдо-функциональный стиль композиции, который мне нравится для такого рода задач.
Мой главный вопрос на самом деле касается здравомыслия / лучших практик, так что, возможно, он слишком субъективен, однако я был бы признателен за возможность получить некоторую обратную связь независимо от этого.
Я собираюсь переместить эти частные методы в открытый статический класс, чтобы они были легко доступны для любого класса, который хочет составить сообщение для службы.
Я также намерен, чтобы различные функции службы создавали свои сообщения с помощью определенных классов построения сообщений для повышения удобства сопровождения.
Это хороший способ реализовать этот простой DSL, или мне не хватает какого-то специального соуса, который позволит мне сделать это лучше?
То, что заставляет меня усомниться в том, что, как только я перемещаю эти методы в другой класс, я увеличиваю длину этих вызовов методов (конечно, я все еще сохраняю первоначальную цель удаления магических строк большого объема .) Должен ли я больше беспокоиться о размере (loc) языкового класса DSL, чем о краткости синтаксиса?
Предостережения
Обратите внимание, что в этом случае удаленная служба плохо реализована и не соответствует каким-либо общим стандартам обмена сообщениями, например, WSDL, SOAP, XML / RPC, WCF и т. Д.
В этих случаях было бы неразумно создавать сообщения, созданные вручную.
В тех редких случаях, когда вам приходится иметь дело со службой, подобной той, о которой идет речь, здесь, и она не может быть реконструирована по какой-либо причине, ответы ниже предоставляют некоторые возможные способы разрешения ситуации.