Download - The Apex Ten Commandments

Transcript

Apex 10 Commandments

Francis Pindar, NetStronghold (UK)@radnip

Kevin Poorman, Madrona Solutions Group@codefriar

#1 Thou shalt not put queries in for loops

#1 Thou shalt not put queries in for loops

#2 Thou shalt not put DML in for loops

#2 Thou shalt not put DML in for loops

#3 Thou shalt have a happy balance between clicks & code

▪ Triggers that replicate declarative functionality.• Roll-up summary• Workflows• Email Templates• Global Settings• …

Good Salesforce Architectural Design

#4 Thou shalt only put one trigger per object

#5 Thou shalt not put code in triggers other than calling methods and managing execution order

#6 Thou shalt utilize maps for queries wherever possible

#7 Thou shalt make use of relationships to reduce queries wherever possible

#8 Thou shalt aim for 100% test coverageIn general test your methods for:

▪ Positive effects. • Given proper input it should act like this.• Not just happy path, but all logic branches.

▪ Negative effects.• Given bad data it should error like this.

▪ Role/Profile/User effects• Given a user with X profile and Y role it should act like this.

#9 Thou shalt write meaningful and useful testsIt’s not a test without assertions.

▪ Assert(A==B, “Reason for Assert failure”)▪ AssertEquals(A,B, “Reason for Assert failure”)▪ AssertNotEquals(A,B, “Reason for Assert failure”)

#9 Thou shalt write meaningful and useful testsTest with your own data

▪ Use Test.StartTest() / Test.StopTest()

#9 Thou shalt write meaningful and useful testsTest one thing at a time

▪ Maintain Focus▪ Just One Thing!

#10 Thou shalt limit future calls and use asynchronous code where possibleIn general bias towards batch apex

▪ Ensure it runs as efficiently as possible. • Limit and tune time outs for callouts.• Tune soql queries for efficiency – dev console can help here.

▪ If you need @future methods.• Optimize them the same way you would optimize your batch apex.• Resist methods that would queue many @future calls at once. (governor limits!)

Francis Pindar

Technical Consultant@radnip

Kevin Poorman

Sr. Consultant@codefriar