# DML Zugriffe mittels Unit of Work Quelle: https://mind-force.de/it/dml-zugriffe-mittels-unit-of-work/ Stand: 2026-07-27 In diesem Blogartikel möchte ich ihnen aufzeigen, wie Sie das Unit of Work Prinzip anwenden können und welche Vorteile das Konzept mit sich bringt. Als [Salesforce Berater](https://mind-force.de/angebot/salesforce-berater/) und Entwickler sehe ich häufig, dass für das Anlegen von mehreren in Relation stehender Salesforce Objekte komplexe und unübersichtliche Code-Konstrukte genutzt werden. Diese Konstrukte sind weder robust, noch wartungsfreundlich. Andrew Fawcett beschreibt in seinem Buch „Force.com Enterprise Architectur“ wie durch die Utility Class [SObjectUnitOfWork](https://github.com/financialforcedev/df12-apex-enterprise-patterns/blob/master/df12/src/classes/SObjectUnitOfWork.cls) Datenbankzugriffe optimiert, transaktionssicher gestaltet und vereinfacht werden können. Zunächst möchte ich ein Szenario beschreiben, welches in einer Salesforce Organisation Tag für Tag stattfindet. Das Erstellen einer Opportunity und den damit verbundenem Product, PricebookEntry und den OpportunityLineItems. ## Der traditionelle Weg ohne Unit of Work Der herkömmliche Weg das oben beschriebene Szenarien abzubilden, setzt voraus, dass Sie die Objekte in der richtigen Reihenfolge erzeugen, damit alle Abhängigkeiten korrekt erfüllt werden. Der folgende Code-Ausschnitt bildet den traditionellen Weg mit 10 Opportunities ab. ``` public class msBulkOppTest { public static void generateOpps(){ List opps = new List(); List productsByOpp = new List(); List pricebookEntriesByOpp = new List(); List oppLinesByOpp = new List(); Pricebook2 pb = [select Id, Name, IsActive from PriceBook2 where IsStandard=True LIMIT 1]; for(Integer o=0; o<10; o++) { Opportunity opp = new Opportunity(); opp.Name = 'NoUoW Test Name ' + o; opp.StageName = 'Open'; opp.CloseDate = System.today(); opps.add(opp); List products = new List(); List pricebookEntries = new List(); List oppLineItems = new List(); for(Integer i=0; i