我有一个场景,我在asp.net前端创建一个产品,然后进入SQL数据库。在创建产品时,我必须将其分配给字体端的3个供应商,以表明这些供应商是唯一提供产品的供应商。
但是,当我输入产品数据并单击提交时,数据将保存在产品表中。我希望它还向指定的供应商发送电子邮件,说“你已被分配到"
最好的事情是什么?我被推荐使用触发器,但不知道如何使用它们。
答案 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
是一个处理所有电子邮件发送的类。
我希望这个想法有助于或者至少为您提供另一种选择。祝你好运!