“Cherrypicking”数据并加载数据的“级别”,无需2个独立的程序

时间:2017-03-21 14:16:47

标签: c# .net

是否有(简单)方法建立“安排”级别系统(1级> 2级> 3级)和“cherrypick”系统(只获得Cat + Cat Owner + Cat Race)而无需写作2个分开的程序?理想情况下,级别系统使用cherrypick系统,但我不需要指定每个“樱桃”本身,因为我不需要能够为所有事情做好准备。

我正在考虑这样的事情

Option Explicit

Sub FilterCstomers()

    Dim PvtTbl      As PivotTable
    Dim PvtItm      As PivotItem
    Dim f           As String

    f = InputBox("Type the text you want to filter:")

    ' set the pivot table
    Set PvtTbl = Sheets("Customers Pivot").PivotTables("Customers_PivotTable")

    With PvtTbl.PivotFields("Concatenation for filtering")
        .ClearAllFilters

        For Each PvtItm In .PivotItems
            If PvtItm.Name Like "*" & f & "*" Then
                PvtItm.Visible = True
            Else
                PvtItm.Visible = False
            End If
        Next PvtItm
    End With

End Sub

最好的方法是将以下内容合并在一起,这样标志系统就不会与级别系统分离

GetCats(catId, 1); //Select cat with objects in level 1
GetCats(catId, 0, flag.Owner); //select Cat and load only Owner

更长的解释:

我有一个对象,我们称之为“猫”,还有许多其他属性,如“所有者”。信息从数据库加载(Cat和所有者是2个表),关系通过Id工作。我在存储库的帮助下加载数据,该存储库也填充其他对象,因此我可以访问Cat.Owner.Name。 加载适用于不同级别,级别0仅获取猫本身,级别1获取Cat并将Owner-obj附加到Cat.Owner并将Race-obj附加到Cat.Race。

有许多像Cat.Owner这样的物体在等级到达某一点时会被加载。

我现在需要访问一个只在高级别加载的对象,但我不需要90%的其他也加载的对象。我可以编写一个新函数,只获取我需要的对象。这样做很好但对我来说似乎不是最好的练习,因为如果我将来遇到类似的问题,我必须编写另一个函数,这很可能。

我的想法是使用标志(枚举)代替我可以指定要加载的级别。但是如果他们希望负载达到最高水平,那么每个人都必须提交每个标志。 (最低旗和最​​高旗之间的每个旗帜)

1 个答案:

答案 0 :(得分:0)

您可以对方法的输入参数使用默认值,并且在调用方法时,只传递所需的参数。如果您未传递参数,则将使用默认值。

所以你的方法看起来像这样:

public string GetCat(int catId, int level = 1, flag cherries = null)
{
    //get Cat here
    if(level > 0)
    {
        Cat.Owner = ownerRepository.GetById(Cat.OwnerId);
        //load more
    }   
    if(level > 1)
    {
        //and so on
    }

    if(cherries.HasFlag(Owner) && Cat.Owner != null)
    {
        Cat.Owner = ownerRepository.GetById(Cat.OwnerId);
    }
    if(cherries.HasFlag(Race) && Cat.Race != null)
    {
        Cat.Race= RaceRepository.GetById(Cat.RaceId);
    }
    //more cherrypicking here
}

使用上面的方法声明,第一个参数(catId)是必需的,必须在调用方法时传递。另外两个参数是可选的,如果没有在方法callm中定义,则将使用它们的defualt值。