Я работаю над компонентом для объединения произвольных токенов с текстом для создания электронных писем. Я собираюсь использовать nvelocity для процесса слияния, поэтому я определил следующий интерфейс:
public interface ITemplateEngine
{
string Merge(string template, IDictionary<string, object> data);
}
Теперь в моем сценарии реализующий класс возвращает строку, содержащую xml (субъект, узлы тела). Далее мне нужен промежуточный класс, используемый для возврата почтового элемента. Вот класс.
public class MailMessageBuilder : IMailMessageBuilder
{
private readonly ITemplateEngine engine;
public MailMessageBuilder(ITemplateEngine engine)
{
this.engine = engine;
}
public MailMessage Build(string name, IDictionary<string, object> tokens)
{
var doc = new XmlDocument();
doc.LoadXml(engine.Merge(name, tokens));
var msg = new MailMessage();
var node = doc.DocumentElement.SelectSingleNode("Body");
msg.Body = node.InnerText;
msg.IsBodyHtml = bool.Parse(node.Attributes.GetNamedItem("isHtml").Value);
msg.Subject = doc.DocumentElement.SelectSingleNode("Subject").InnerText;
return msg;
}
}
Теперь, на мой реальный вопрос, вы думаете, мой класс построителя почтовых сообщений делает больше, чем должен, так как он извлекает значения из xml? Если да, то есть другие идеи дизайна?
Спасибо!