📜  Apex-触发设计模式(1)

📅  最后修改于: 2023-12-03 14:59:21.312000             🧑  作者: Mango

Apex-触发设计模式

什么是Apex-触发器

当在Salesforce平台上执行数据处理操作时,例如添加、更新或删除记录时,Apex-触发器可以用于自动化与此相关的逻辑,而无需编写单独的Apex代码。

创建Apex-触发器后,您可以将触发器附加到标准或自定义对象,并定义触发器在何时执行、以及在何种情况下执行的逻辑。

触发设计模式

触发器应该遵循一些最佳实践和设计模式,以确保它们的可维护性和可扩展性。

单一职责原则 (SRP)

每个触发器只执行一个单一的责任或职责。将多个用例或任务压缩成一个触发器会导致代码的复杂性和难以维护。如果要实现更多的用例或任务,建议创建不同的触发器。

单一对象事件

触发器应该仅在单个对象上执行,如标准或自定义对象。在同一个触发器中处理不同的对象事件会使代码更难以维护和可读性降低。例如,将对象A的前后置逻辑与对象B的前后置逻辑混合在一个触发器中就是不建议的。

事件阶段

由于Apex-触发器可在记录在数据库中的不同状态下触发,应该正确处理不同事件阶段。在处理记录创建事件时的逻辑与处理记录更新事件的逻辑不同。如果将它们混合在一起,请确保正确处理它们。

优先级

不同触发器会执行不同的逻辑,如果不同逻辑耦合,会影响代码的可扩展性和可维护性。可以为触发器定义优先级,以确定它们的执行顺序,并且此优先级不应与其他触发器相冲突。

避免重复逻辑

避免在Apex-触发器中执行重复逻辑,例如在用户界面定义系统默认值。像这样的操作可以在另一个位置定义。

代码示例
trigger AccountTrigger on Account (before insert, after insert, before update, after update, before delete, after delete) {
    if(Trigger.isInsert){
        // 在新建记录中执行的逻辑
        new AccountTriggerHandler().onInsert(Trigger.new);
    }
    if(Trigger.isUpdate){
        // 在更新记录中执行的逻辑
        new AccountTriggerHandler().onUpdate(Trigger.new, Trigger.oldMap);
    }
    if(Trigger.isDelete){
        // 在删除时执行逻辑
        new AccountTriggerHandler().onDelete(Trigger.old);
    }
}
public class AccountTriggerHandler{
    public void onInsert(List<Account> accounts){
        // 在新建记录中执行的逻辑
    }
    public void onUpdate(List<Account> newAccounts, Map<Id, Account> oldAccounts){
        // 在更新记录中执行的逻辑
    }
    public void onDelete(List<Account> accounts){
        // 在删除时执行逻辑
    }
}
结论

在编写Apex-触发器时,应该遵循这些最佳实践和设计模式,以确保代码清晰,具有可维护性和可扩展性。如果您使用一些框架帮助设计您的代码,那将更加高效和便捷。