我正在研究用于合并任意标记和文本以生成电子邮件的组件。我将使用nvelocity的合并过程,所以我定义如下界面:TemplatingEngine设计问题
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接口改为包含一个通用的arg以便有多种类型(xml,数据表等)。 谢谢! – Marco 2010-07-22 15:54:25