Apex — это мощный язык программирования, используемый на платформе Salesforce для настройки и расширения ее возможностей. Чтобы обеспечить эффективный и удобный в сопровождении код, важно следовать передовым практикам при разработке кода Apex. В этой статье мы рассмотрим десять основных рекомендаций Apex, а также примеры кода, которые помогут вам писать высококачественный код в Salesforce.
- Используйте методы групповой обработки.
Одним из ключевых моментов при разработке Apex является написание кода, который может эффективно обрабатывать операции с большими объемами данных. Для этого обязательно используйте коллекции (например, списки или наборы) при работе с операторами DML внутри циклов. Вот пример:
List<Account> accountsToUpdate = new List<Account>();
for (Contact contact : Trigger.new) {
if (contact.Email != null) {
Account acc = new Account(Id = contact.AccountId, Last_Contact_Date__c = Date.today());
accountsToUpdate.add(acc);
}
}
update accountsToUpdate;
- Избегайте операторов SOQL и DML внутри циклов.
Выполнение запросов SOQL или операций DML внутри циклов может привести к проблемам с производительностью и исключениям из ограничений регулятора. Вместо этого увеличьте объем своего кода, собрав необходимые данные или записи вне цикла и обработав их коллективно. Вот пример:
List<Contact> contactsToUpdate = new List<Contact>();
Set<Id> accountIds = new Set<Id>();
for (Opportunity opp : Trigger.new) {
accountIds.add(opp.AccountId);
}
contactsToUpdate = [SELECT Id, Name FROM Contact WHERE AccountId IN :accountIds];
// Process the contactsToUpdate list
- Внедрите обработку и ведение журнала ошибок.
Правильная обработка ошибок имеет решающее значение в разработке Apex, поскольку позволяет гарантировать правильное обнаружение и устранение проблем. Используйте блоки try-catch для перехвата исключений и регистрации сообщений об ошибках для упрощения отладки. Вот пример:
try {
// Code that may throw exceptions
}
catch (Exception ex) {
System.debug('An error occurred: ' + ex.getMessage());
}
- Используйте оптимизацию запросов и поиска.
При работе с большими наборами данных оптимизируйте запросы SOQL с помощью выборочных фильтров, индексации и оптимизации запросов. Кроме того, рассмотрите возможность использования SOSL (языка поиска объектов Salesforce) для эффективного текстового поиска. Вот пример:
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Name LIKE 'Acme%' LIMIT 100];
- Пользуйтесь информацией об ограничениях регулятора.
Salesforce вводит ограничения регулятора, чтобы предотвратить злоупотребления и обеспечить стабильность платформы. Помните об этих ограничениях и разрабатывайте свой код так, чтобы оставаться в их пределах. Используйте методы ограничения и соответствующие методы для активной обработки ограничений. Вот пример:
if (Limits.getDMLRows() + accountsToUpdate.size() > Limits.getLimitDMLRows()) {
// Handle limit exceeded scenario
}
- Используйте описательные имена переменных и методов.
Написание кода со значимыми и описательными именами переменных и методов улучшает читаемость и удобство обслуживания. Избегайте использования сокращений или загадочных названий, которые могут сбить с толку других разработчиков. Вот пример:
public void calculateMonthlyRevenue(List<Opportunity> opportunities) {
// Method logic
}
- Следуйте шаблонам проектирования Apex.
Используйте шаблоны проектирования, такие как Singleton, Factory и Service Layer, для написания модульного, масштабируемого и многократно используемого кода. Шаблоны проектирования обеспечивают структуру и согласованность вашей кодовой базы. Вот пример шаблона Singleton:
public class MySingleton {
private static MySingleton instance;
private MySingleton() {}
public static MySingleton getInstance() {
if (instance == null) {
instance = new MySingleton();
}
return instance;
}
}
- Реализуйте тестовые классы и модульное тестирование.
Всегда пишите тестовые классы для проверки кода Apex. Стремитесь к максимальному покрытию кода и тестируйте различные сценарии, чтобы обеспечить стабильность и надежность вашего приложения. Вот пример:
@isTest
public class MyApexTestClass {
@isTest
static void testMethod1() {
// Test logic
}
}
- Используйте пользовательские настройки или пользовательские типы метаданных.
Вместо жесткого кодирования значений используйте пользовательские настройки или пользовательские типы метаданных для хранения настраиваемых данных. Это упрощает обслуживание и обеспечивает гибкость без изменения кода. Вот пример использования пользовательских типов метаданных:
MyCustomMetadata__mdt config = MyCustomMetadata__mdt.getInstance('Default');
String apiKey = config.API_Key__c;
- Следуйте стандартам кодирования и контролю версий.
Придерживайтесь стандартов кодирования Salesforce и лучших практик для обеспечения согласованности и читаемости кода. Используйте системы контроля версий, такие как Git, для отслеживания изменений и эффективного сотрудничества с другими разработчиками.