SlideShare una empresa de Scribd logo
1 de 31
www.vrpinc.com 
SFDC Apex 
Patterns 
Valery Dvornichenko, 
Certified SFDC Developer
Introduction 
Singleton 
Strategy 
Decorator 
Facade 
Composite 
Bulk State Transition 
www.vrpinc.com
www.vrpinc.com 
Singleton 
Решение задач с 
использованием одного 
экземпляра объекта и 
сохранением состояния
www.vrpinc.com 
Common Uses For This Pattern 
Глобальный контекст переменной в рамках одной Entry Point. 
Apex RL Example: 
• Schema.Describe результат по известному объекту 
Java IR Example: 
• Логирующий Singleton (FileLogger) 
• Объект Mouse 
RL Example: 
• Я
www.vrpinc.com 
Apex Implementation
www.vrpinc.com 
Java Implementation
www.vrpinc.com 
Real Life Implementation
www.vrpinc.com 
Strategy 
Решение задач 
различными методами, 
которые могут быть 
выбраны в процессе 
выполнения программы, 
не вникая в суть решения
www.vrpinc.com 
Common Uses For This Pattern 
Предназначается для выполнения задач, которые могут быть 
выполнены различными способами с возможностью выбора этого 
способа во время выполнения задачи.
www.vrpinc.com 
Apex Example
www.vrpinc.com 
Apex Example
The Decorator 
Расширяем 
существующий объект 
путем добавления к нему 
дополнительного слоя, 
обертки 
www.vrpinc.com
www.vrpinc.com 
Apex Implementation
www.vrpinc.com 
Apex Implementation
www.vrpinc.com 
Facade 
Упрощение интерфейса 
для работы со 
комплексной логикой
www.vrpinc.com 
Java Example
www.vrpinc.com 
Java Example
www.vrpinc.com 
Java Example
www.vrpinc.com 
Apex Example
www.vrpinc.com 
Apex Example
Composite 
Используется для 
представления 
выражений в Apex 
независимо от его 
сложности, не натыкаясь 
на Salesforce Goveror 
limits, которые может 
вызывать рекурсия. 
www.vrpinc.com
www.vrpinc.com 
Intent 
• Создание структуры объектов, которая может содержать в себе как 
объекты так и структуры этих же объектов
www.vrpinc.com 
Intent
www.vrpinc.com 
Intent 
• Работа с объектом и структурой единообразна и унифицирована. 
• Т.е. нет разницы, «отдаем команду» мы одному объекту или целой 
структуре
www.vrpinc.com 
Implementation
Bulk State 
Transition 
Использование “Bulk” 
подхода для обработки 
данных 
www.vrpinc.com
www.vrpinc.com 
Main Idea 
 Работа с данными в триггере должна вестись в bulk –режиме, т.е. не 
работать с данными поодиночке. 
 Идеальное решение – использование методов, которые 
обрабатывают list данных за один заход, а не вызывать метод, 
который работает с одной записью, в цикле
www.vrpinc.com 
Main Idea 
VS
www.vrpinc.com 
Implementation 
- Реализовать внешний метод, принимающий List данных, который и 
будет содержать в себе логику обработки 
- В триггере только формируем выборку данных и отправляем в метод. 
- Задача триггера состоит лишь в укомплектовании выборки, логика 
вся вынесена во внешний метод 
- ….
www.vrpinc.com 
Implementation 
- Реализовать внешний метод, принимающий List данных, который и 
будет содержать в себе логику обработки 
- В триггере только формируем выборку данных и отправляем в метод. 
- Задача триггера состоит лишь в укомплектовании выборки, логика 
вся вынесена во внешний метод 
- Внешний метод выполнит всю работу 
www.vrpinc.com 
Thank you for 
your attention

Más contenido relacionado

Similar a Apex OOP Patterns (Valery Dvornichenko)

20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...corehard_by
 
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность 2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность Омские ИТ-субботники
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
PureMVC в картинках - часть 1
PureMVC в картинках - часть 1PureMVC в картинках - часть 1
PureMVC в картинках - часть 1Rostyslav Siryk
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичковOvadiah Myrgorod
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФПAlexander Granin
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLDmitry Kremer
 

Similar a Apex OOP Patterns (Valery Dvornichenko) (20)

20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
 
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность 2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
2016-11-12 01 Егор Непомнящих. Агрегация и осведомленность
 
Refactoring
RefactoringRefactoring
Refactoring
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
PureMVC в картинках - часть 1
PureMVC в картинках - часть 1PureMVC в картинках - часть 1
PureMVC в картинках - часть 1
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Async
AsyncAsync
Async
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
 

Más de Yury Bondarau

Minsk lightnng week v2
Minsk lightnng week v2Minsk lightnng week v2
Minsk lightnng week v2Yury Bondarau
 
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)Yury Bondarau
 
Under the Covers of Salesforce (Eugene Rusalev)
Under the Covers of Salesforce (Eugene Rusalev)Under the Covers of Salesforce (Eugene Rusalev)
Under the Covers of Salesforce (Eugene Rusalev)Yury Bondarau
 
ExactTarget (Dmitry Yasko)
ExactTarget (Dmitry Yasko)ExactTarget (Dmitry Yasko)
ExactTarget (Dmitry Yasko)Yury Bondarau
 
Heroku1 (Alexey Filippov)
Heroku1 (Alexey Filippov)Heroku1 (Alexey Filippov)
Heroku1 (Alexey Filippov)Yury Bondarau
 
Salesforce Summer 14 Release Notes (Alexandra Vilks)
Salesforce Summer 14 Release Notes (Alexandra Vilks)Salesforce Summer 14 Release Notes (Alexandra Vilks)
Salesforce Summer 14 Release Notes (Alexandra Vilks)Yury Bondarau
 
Work.com (Valery Dvornichenko)
Work.com (Valery Dvornichenko)Work.com (Valery Dvornichenko)
Work.com (Valery Dvornichenko)Yury Bondarau
 
Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)
Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)
Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)Yury Bondarau
 
IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)Yury Bondarau
 

Más de Yury Bondarau (9)

Minsk lightnng week v2
Minsk lightnng week v2Minsk lightnng week v2
Minsk lightnng week v2
 
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
Aura Framework and Lightning (Nikolay Zenko and Alexey Filippov)
 
Under the Covers of Salesforce (Eugene Rusalev)
Under the Covers of Salesforce (Eugene Rusalev)Under the Covers of Salesforce (Eugene Rusalev)
Under the Covers of Salesforce (Eugene Rusalev)
 
ExactTarget (Dmitry Yasko)
ExactTarget (Dmitry Yasko)ExactTarget (Dmitry Yasko)
ExactTarget (Dmitry Yasko)
 
Heroku1 (Alexey Filippov)
Heroku1 (Alexey Filippov)Heroku1 (Alexey Filippov)
Heroku1 (Alexey Filippov)
 
Salesforce Summer 14 Release Notes (Alexandra Vilks)
Salesforce Summer 14 Release Notes (Alexandra Vilks)Salesforce Summer 14 Release Notes (Alexandra Vilks)
Salesforce Summer 14 Release Notes (Alexandra Vilks)
 
Work.com (Valery Dvornichenko)
Work.com (Valery Dvornichenko)Work.com (Valery Dvornichenko)
Work.com (Valery Dvornichenko)
 
Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)
Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)
Salesforce Security Model (Dmitry Goshko, Igor Haritonovich)
 
IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)
 

Apex OOP Patterns (Valery Dvornichenko)

  • 1. www.vrpinc.com SFDC Apex Patterns Valery Dvornichenko, Certified SFDC Developer
  • 2. Introduction Singleton Strategy Decorator Facade Composite Bulk State Transition www.vrpinc.com
  • 3. www.vrpinc.com Singleton Решение задач с использованием одного экземпляра объекта и сохранением состояния
  • 4. www.vrpinc.com Common Uses For This Pattern Глобальный контекст переменной в рамках одной Entry Point. Apex RL Example: • Schema.Describe результат по известному объекту Java IR Example: • Логирующий Singleton (FileLogger) • Объект Mouse RL Example: • Я
  • 7. www.vrpinc.com Real Life Implementation
  • 8. www.vrpinc.com Strategy Решение задач различными методами, которые могут быть выбраны в процессе выполнения программы, не вникая в суть решения
  • 9. www.vrpinc.com Common Uses For This Pattern Предназначается для выполнения задач, которые могут быть выполнены различными способами с возможностью выбора этого способа во время выполнения задачи.
  • 12. The Decorator Расширяем существующий объект путем добавления к нему дополнительного слоя, обертки www.vrpinc.com
  • 15. www.vrpinc.com Facade Упрощение интерфейса для работы со комплексной логикой
  • 21. Composite Используется для представления выражений в Apex независимо от его сложности, не натыкаясь на Salesforce Goveror limits, которые может вызывать рекурсия. www.vrpinc.com
  • 22. www.vrpinc.com Intent • Создание структуры объектов, которая может содержать в себе как объекты так и структуры этих же объектов
  • 24. www.vrpinc.com Intent • Работа с объектом и структурой единообразна и унифицирована. • Т.е. нет разницы, «отдаем команду» мы одному объекту или целой структуре
  • 26. Bulk State Transition Использование “Bulk” подхода для обработки данных www.vrpinc.com
  • 27. www.vrpinc.com Main Idea  Работа с данными в триггере должна вестись в bulk –режиме, т.е. не работать с данными поодиночке.  Идеальное решение – использование методов, которые обрабатывают list данных за один заход, а не вызывать метод, который работает с одной записью, в цикле
  • 29. www.vrpinc.com Implementation - Реализовать внешний метод, принимающий List данных, который и будет содержать в себе логику обработки - В триггере только формируем выборку данных и отправляем в метод. - Задача триггера состоит лишь в укомплектовании выборки, логика вся вынесена во внешний метод - ….
  • 30. www.vrpinc.com Implementation - Реализовать внешний метод, принимающий List данных, который и будет содержать в себе логику обработки - В триггере только формируем выборку данных и отправляем в метод. - Задача триггера состоит лишь в укомплектовании выборки, логика вся вынесена во внешний метод - Внешний метод выполнит всю работу 
  • 31. www.vrpinc.com Thank you for your attention