2010-01-16 53 views
4

我正在构建一个我们正在使用电子邮件模板的网站。正如在HTML模板中,我们将令牌传入类似{用户名},{电子邮件},{名称首字母}等。寻找一种存储电子邮件模板的好方法

根据最佳实践,我正努力在哪里存储这些令牌。我将首先展示我所采用的方法,并且我会非常高兴地听到一些专家视角和其他方法。

我在名为/ Templates /的文件夹中创建了HTML模板。

我所说的静态方法在我的服务层,这需要在以下参数:

  1. 用户名
  2. 用户名
  3. 电子邮件
  4. TEMPLATEPATH( “〜/模板”)
  5. 电子邮件主题

在服务层我有m y静态方法SendUserEmail(),它使用一个Template类 - 它接受一个路径,将它作为一个字符串加载,并具有一个AddToken()方法。

在我的静态SendUserEmail()中,我从方法签名构建令牌列表并发送电子邮件。

这使得在我的实际使用中有相当长的方法调用,特别是因为我从web.config调用“TemplatePath”和“电子邮件主题”。我可以创建一个具有比ConfigurationManager.AppSettings更短的方法调用的实用程序,但我的担心更多的是我通常不会看到方法签名这么久,我觉得这是因为我做错了什么。

这项技术对我现在使用的电子邮件非常有用,最多使用前3个标记。但是,将来我会有更多的令牌传入,我只是想知道要采取什么方法。

我是否创建特定于需要发送的电子邮件的方法?即。 SendNewUserRegistration(),SendMarketingMaterial(),每个参数都有不同的签名?

我正在使用ASP.NET成员资格,其中可能包含所有我需要的字段的扩展。有三个主要对象,aspnet_User,aspnet_Mebership和aspnet_profile。如果它全部包含在一个对象中,我会刚刚通过这个对象。是否有关于传递所有3的性能问题,以获得我需要的所有字段?这是相对于只传入aspnet_User.UserID,aspnet_User.Email等?

我可以看到传递一个带有令牌条目的字典,但我只是想知道这是否太多以致无法询问调用页面?

是否有它的一个配置文件坚持这些办法自己叫Templates.config,其中有像标签 -

<Templates> 
<EmailTemplate Name="New User Registration"> 
<Tokens> 
<UserName> 
<UserID> 
<Email> 
</Tokens> 
<Message Subject="Hi welcome..."> 
    Hi {UserName}... 
</Message> 
</EmailTemplate> 
</Templates> 

我想主要的原因我问,是因为我很难确定责任应该在哪里确定使用什么样的模板,以及如何传递参数。调用页面是否需要构建TokenName,TokenValue字典可以吗?或者该方法是否需要将每个参数作为定义的参数?这在web.config中看起来不合适,因为我有2个入口,并且感觉应该看起来更加嵌套。

谢谢。客观方法的任何技巧或建议我可以用来问我的方法是否可行。

回答

2

首先我想建议您使用NVelocity作为模板引擎。至于主要问题,我认为你可以创建一个抽象类MailMessage并为每一个需要的消息派生每一个(与独特的模板)。所以,你会使用这个像以下:

MailMessage message = new UserRegistrationMessage(tokens); 
//some code that sends this message 

走出这样,你强迫每个具体XXXMessage类是负责存储模板,给定令牌加油吧。如何处理令牌?最简单的方法是在将它传递给消息之前创建一个字典,这样每个具体的消息类将知道如何处理传递的字典以及它应该包含什么标记,但是还需要记住它应包含的标记。另一种方式(我更喜欢它)是创建一个通用抽象类型TokenSet以及为每个需要的唯一令牌集派生一个。在它TokenSet和几个属性:例如,你可以创建一个UserMessageTokenSet因此,使用这种方式,你将永远知道

UserNameToken 
SomeUserProfileDataToken 

等,你应该为每个标记设置设置什么样的数据和
UserRegistrationMessage就知道了从这个tokenSet取什么。

有很多方法可以去。如果你会更好地描述你的任务,我想我会尝试建议你更具体的东西。但总体思路如上所列。希望它有帮助=)