客户的sql电子邮件通知

时间:2016-04-08 09:07:11

标签: sql sql-server sql-server-2008 tsql triggers

我有一个场景,我在asp.net前端创建一个产品,然后进入SQL数据库。在创建产品时,我必须将其分配给字体端的3个供应商,以表明这些供应商是唯一提供产品的供应商。

但是,当我输入产品数据并单击提交时,数据将保存在产品表中。我希望它还向指定的供应商发送电子邮件,说“你已被分配到"

最好的事情是什么?我被推荐使用触发器,但不知道如何使用它们。

1 个答案:

答案 0 :(得分:0)

这更像是一个架构问题,而不是SQL Server问题,但我很乐意发表意见。我将退出在数据库中执行此操作的想法,并为您提供不同的视角。

您所描述的内容属于业务规则范围,将业务规则放入数据库(尤其是触发器中)可能会使您的应用程序更难以理解和维护。

相反,我建议创建一个服务层并在服务层中协调这样的所有业务规则,而不是将它们混合到数据库中。这样,数据库就有一个工作(一个职责),那就是存储数据......它不需要知道任何其他工作。

就个人而言,我喜欢以这种方式组织我的代码,因为它使单元测试更容易,并且更容易遵守SOLID原则。

请耐心等待一个例子......在C#中,你可能会有一个看起来像这样的课程:

class ProductService
{
    private Database _database;
    private Notifier _notifier;

    public ProductService(Database database, Notifier notifier)
    {
        _database = database;
        _notifier = notifier;
    }

    public void AddProduct(Product product)
    {
        _database.SaveProduct(product);
         NotifySuppliersAboutProduct(product);
    }

    private void NotifySuppliersAboutProduct(Product product)
    {
        foreach (var supplier in product.Suppliers)
        {
            NotifySupplierAboutProduct(supplier, product)
        }
    }

    private void NotifySupplierAboutProduct(Supplier supplier, Product product)
    {
        // TODO: Construct email to/subject/body variables here
        _notifier.SendEmail(to, subject, body);
    }

}

ProductService只是通过组合所需的其他类来协调工作,并呼吁他们完成某些工作,在这种情况下添加产品。

Database是一个处理与数据库的所有接口的类。

Notifier是一个处理所有电子邮件发送的类。

我希望这个想法有助于或者至少为您提供另一种选择。祝你好运!