什么是最简洁的搜索逻辑编码方式,如果找不到则创建,再次搜索

时间:2010-09-02 16:33:49

标签: coding-style

我最近一直在编写如下代码。

我不喜欢else块中的重复代码。

我有什么明显的遗漏吗?当我看到无限循环的可能性时,我思索着'goto'但放弃了它。

我知道显而易见的事情是创建一个单独的功能。我犹豫的原因是因为,就像我说的那样,我经常遇到这种情况,所以这是很多功能。对于我得到的东西来说,似乎太复杂了(即没有重复的代码)。

        Logger.Log("Finding parent.",
            System.Diagnostics.TraceEventType.Start);

        query = string.Format(
            "Select Id, a  " +
            "From Parent__c " +
            "Where a ='{1}' limit 1", childId);

        queryResult = DoSOQLQuery(queryResult, query);

        string parentId;

        if (queryResult != null && queryResult.size > 0)
        {
            parentId = ((Parent__c)queryResult.records[0]).Id;

            Logger.Log(string.Format("Parent__c.Id={0}", 
                parentId),
                System.Diagnostics.TraceEventType.Verbose);
        }
        else
        {
            Logger.Log("Parent not found.",
                System.Diagnostics.TraceEventType.Error);

            Logger.Log("Creating parent.",
                System.Diagnostics.TraceEventType.Start);

            string apexToExecute = string.Format(
                "Utility.CreateParent('{0}');",
                childId);

            this.webServices.execute(apexToExecute);

            queryResult = DoSOQLQuery(queryResult, query);

            if (queryResult != null && queryResult.size > 0)
            {
                parentId = ((Parent__c)queryResult.records[0]).Id;

                Logger.Log(string.Format("Parent__c.Id={0}", 
                    parentId),
                    System.Diagnostics.TraceEventType.Verbose);
            }
        }

        Logger.Log("Done finding parent",
            System.Diagnostics.TraceEventType.Stop);

1 个答案:

答案 0 :(得分:3)

因此,如果我将您的代码概括为

SEARCH

IF (FOUND) THEN
    RETRIEVE
ELSE
    CREATE
    RETRIEVE

你能不能像

那样做
SEARCH

IF (NOT FOUND) THEN
    CREATE

RETRIEVE