Trigger Handler Pattern | Day 5 Part 2
Table of Contents
Introduction
This tutorial will guide you through the Trigger Handler Pattern in Salesforce Apex, designed to streamline your trigger management and enhance code organization. By adopting this pattern, you can improve maintainability, readability, and scalability of your Salesforce applications.
Step 1: Understand the Trigger Handler Pattern
The Trigger Handler Pattern separates the trigger logic from the trigger itself, allowing for cleaner and more maintainable code. Here are the key concepts:
- Trigger: The entry point that executes your code in response to changes in Salesforce records.
- Handler Class: A dedicated class that contains all the logic for processing the trigger events.
Practical Tip
Always begin by defining your trigger in the context of the handler to maintain clarity.
Step 2: Create the Trigger
- Navigate to your Salesforce org and open the Developer Console.
- Create a new trigger:
- Go to File > New > Apex Trigger.
- Name your trigger (e.g.,
AccountTrigger).
- Define the trigger by specifying the events it will respond to:
trigger AccountTrigger on Account (before insert, before update) {
AccountTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}
Common Pitfall
Avoid putting business logic directly in the trigger. Always delegate it to the handler class.
Step 3: Implement the Handler Class
- Create a new Apex class:
- Go to File > New > Apex Class.
- Name your class (e.g.,
AccountTriggerHandler).
- Define the handler method that will process the trigger logic:
public class AccountTriggerHandler {
public static void handleTrigger(List<Account> newAccounts, Map<Id, Account> oldAccountsMap) {
// Implement logic for handling accounts
for (Account acc : newAccounts) {
// Add your business logic here
}
}
}
Practical Advice
Use bulkification in your logic to handle multiple records efficiently, avoiding governor limits.
Step 4: Add Business Logic
- Inside the
handleTriggermethod, implement the specific business logic based on your requirements. For example, you might want to validate account names or set default values.
Example Code Snippet
if (String.isEmpty(acc.Name)) {
acc.Name = 'Default Account Name';
}
Real-World Application
This approach allows you to easily test your handler class independently from the trigger, simplifying unit testing and debugging.
Step 5: Testing the Trigger and Handler
- Create test classes for your trigger to ensure that your logic works as expected.
- Use the
@isTestannotation to define your test methods:
@isTest
public class AccountTriggerHandlerTest {
@isTest
static void testHandleTrigger() {
// Create test accounts and call the trigger
Account testAccount = new Account(Name = '');
insert testAccount;
// Verify the logic works as intended
testAccount = [SELECT Name FROM Account WHERE Id = :testAccount.Id];
System.assertEquals('Default Account Name', testAccount.Name);
}
}
Tip for Testing
Always include assertions in your tests to validate expected outcomes.
Conclusion
The Trigger Handler Pattern provides a robust framework for managing triggers in Salesforce Apex. By separating your trigger logic into a handler class, you will enhance your code’s maintainability and scalability. As you implement this pattern, remember to prioritize bulk processing and comprehensive testing to ensure optimal performance.
Consider exploring additional resources on advanced Apex programming techniques to further enhance your skills.