I recently revised the original Factory pattern article, and wanted to write a follow-up after a few years' spent reflecting on its usage within Apex. In particular, I'd like to talk a little bit about the Singleton pattern, and how with a small amount of work we can enhance the existing Factory class in order to gracefully create cached instances of classes where a large amount of work goes into constructing them.| www.jamessimone.net
Following up on the Object-Oriented Basics post, this time we switch our attention to interfaces and abstract classes - when to use them, when to avoid them, and how to distinguish between them. Learn all about what makes an interface successful, how to consolidate logic in abstract classes, and more!| www.jamessimone.net
Assignment, be it for Leads, Cases, or custom objects in Salesforce, doesn't always conform to out-of-the-box offerings. I've seen a few places where OmniChannel didn't quite align with a company's business rules; where Lead Assignment Rules didn't offer the capabilities necessary to properly assign an owner. One common example of this is the so-called 'round robin' assigner, where a company's leads (or any other object) need to be assigned fairly between a number of sales reps. In this artic...| www.jamessimone.net
So-called Lazy evaluated functions have their actual execution delayed until a terminator function is called. It's common for lazy functions to be chained together using fluent interfaces, culminating with actions being performed when the terminator function is called. What can Salesforce developers writing Apex code stand to gain by learning more about lazy functions? Fluent interfaces -- or objects that return themselves during function calls -- also tend to satisfy one of the prerequisites...| www.jamessimone.net
Batchable and Queueable Apex are both powerful processing frameworks within Salesforce. Unlock the power of both Batchable and Queueable Apex with the easily extendable DataProcessor pattern.| www.jamessimone.net
API development in Apex is mostly bespoke, requiring the duplication of rest resources. Let's look at how we can change that using inheritance and polymorphism to power our routes. Using extendable, dynamic APIs give us a huge amount of flexibility in spinning up new HTTP routes within the /apexrest/ path, letting us write code that external teams can stress-test and experiment with faster.| www.jamessimone.net
The abstract enum class in Apex can be very helpful as a class-like object, but there are a few things you should keep in mind to avoid getting bitten by the use of enums.| www.jamessimone.net
We often hear the word idiomatic applied to programming languages to express the language-specific way of accomplishing routinely encountered problems. In this post, we dive into how to write idiomatic Salesforce Apex to make the most of each line of code.| www.jamessimone.net
Dependency injection is a crucial method for correctly initializing & testing objects, and the Factory pattern can help to standardize how your SFDC Apex objects are produced| www.jamessimone.net