Я работаю над компонентом для слияния произвольных токенов с текстом, чтобы генерировать электронные письма. Я собираюсь использовать NVelocity для процесса слияния, поэтому я определил следующий интерфейс:TemplatingEngine Design Question
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? Если да, то любые другие дизайнерские идеи?
Спасибо!
Хорошее предложение, я изменил интерфейс IMailMessageBuilder на включают общий аргумент, чтобы иметь несколько типов (xml, таблица данных и т. д.). спасибо! – Marco