带有业务逻辑与代码的视图

| 对于应用程序,我需要每小时发送一次个性化的邀请电子邮件给最终用户。这些用户的电子邮件地址以及他们的其余信息在数据库中。 所有有一点
Planned.IsPlannable
设置为
True
, 有一个
Planned.DateStart
和一个 一定之间的
Planned.DateEnd
期间可用于接收 电子邮件。 每小时大约有350条消息要发送。 所有的信息 消息中必须包含 从数据库中。 该应用程序是 .NET4.0控制台应用程序,用于数据 访问我使用Subsonic3.0。 至少有两种情况可供选择:通过以下方式检索适当的数据: 1 :)查看类似:
SELECT    [Computer].ComputerName, 
          [User].UserEmail, 
          [Planned].DateAvailable, 
          [Planned].DatePlanned
FROM      [Computer] 
INNER JOIN
          [Planned] ON [Computer.ComputerID] = [Planned.ComputerID] 
INNER JOIN
          [User] ON [Computer].UserID = [User].UserID
WHERE     (DATEDIFF(dd, GETDATE(), [Planned.DateAvailable]) < 10) 
          AND Planned.IsPlannable = 1
并根据此视图的结果在此应用程序的C#代码中编写适当的消息。 2 :)在视图中的sql-server上编写整个消息,并返回类似
[EmailTo]
[Subject]
[Body]
然后仅遍历结果并从中创建“ 6”个对象 在这两种情况下,我都会收到如下消息:
foreach (vwGetInvitableComputer u in UserController.GetAllInvitableUsers())
{
    // where the usercontroller wraps the Subsonic logic.
    // the composition happens here
}
迭代C#代码中的内容,然后仅从该预格式化的数据中编写出邮件消息。 选择哪种性能和资源是明智的选择? 更新:选项2中确实存在数据库中的文本操作。但是,这是将消息体中的三个字符串替换为CompterName,DateStart和DateEnd。也许,SQL视图足够聪明,可以扩展其性能,而c#代码是否“在请求时”?     
已邀请:
        首先要考虑的问题:您是否可以设想需要更改电子邮件格式的时间?如果没有,那可能没关系。 第二个考虑因素:您能设想电子邮件需要比SQL易于传递的更多操作的时间吗?如果是这样,那么您绝对应该选择C#。 第三考虑:重新部署对环境有多大问题? 最后是另一个选择:使用C#编写消息,但是使用可以轻松更新的基于数据库或文件的模板。     
        我将选择选项2,使用视图或存储过程来构成在服务器上传递电子邮件所需的所有信息。理想情况下,数据库调用应导致往返服务器的次数最少。     

要回复问题请先登录注册