src/Facades/Purchase.php
public static function update($objToUpdate, array $data){
        $classOfObj = get_class($objToUpdate);
        if(strcmp($classOfObj, FacadeHelper::simpleAppendClassNameSpace("Purchase")) != 0){
            throw new \Exception("Target object class:{" .  $classOfObj . "} is not an instance of Purchase.");
        }
        $newPurchaseObj = Purchase::create($data);
        $clonedOfObj = FacadeHelper::cloneObj($objToUpdate);
        FacadeHelper::mergeObj($clonedOfObj, $newPurchaseObj);
        return $clonedOfObj;
    }
public static function update($objToUpdate, array $data){
        $classOfObj = get_class($objToUpdate);
        if(strcmp($classOfObj, FacadeHelper::simpleAppendClassNameSpace("Purchase")) != 0){
            throw new \Exception("Target object class:{" .  $classOfObj . "} is not an instance of Purchase.");
        }
        $newPurchaseObj = Purchase::create($data);
        $clonedOfObj = FacadeHelper::cloneObj($objToUpdate);
        FacadeHelper::mergeObj($clonedOfObj, $newPurchaseObj);
        return $clonedOfObj;
    }
This is an immutable function