It's common when discussing software engineering to encounter the phrase 'decoupling.' I've talked about it in over ten articles on this site alone 😅. Decoupling itself is really a nod to one of the SOLID principles -- namely, dependency inversion or the idea that objects shouldn't be 'strongly coupled,' instead relying on 'loose coupling' where objects take in dependencies that are as abstract as possible. Why does this matter? Why should we consider how strong or loosely coupled the obje...| www.jamessimone.net
We owe our ability to understand abstractions in programming to philosophy; much as we owe a debt to mathematics for putting the theorems responsible for our code -- and computers -- to work into words. Consider the immortal words present in the Tao: A well-shut door will stay closed without a latch. Skillful fastening will stay tied without knots. One does not simply (walk into Mordor) build a door that works well. A factory for doors cannot provide you with the quality of worksmanship and p...| www.jamessimone.net
Expressing intent through naming is a challenge, but well-named methods can help to expose even the most complicated of programming mechanisms. In programming, as in life, context is key - let's explore how naming can elevate the intent and rationale behind code! Whether you're just beginning your programming journey or you're a veteran programmer of many years, it's my hope that there's something in this post for everybody.| www.jamessimone.net
A few months ago I was tasked with replacing Declarative Lookup Rollup Summaries (DLRS) in an org suffering from frequent deadlocks. Rollup summary fields in Salesforce are plagued by severe limitations -- only being available on master-detail relationships being just the start of the list. Read on to learn about how I built Rollup to assist in orgs looking for DLRS-like flexibility with a much smaller performance overhead, complete with elastic scaling (go fast when you need to, slow when th...| 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
Structuring your unit tests to run fast in Salesforce's Apex programming language is crucially important when designing large systems, allowing you to quickly iterate and successfully refactor.| www.jamessimone.net