何时在 PowerShell 中创建新函数?

When to create a new function in PowerShell?

主要问题是我什么时候应该在 powershell 中创建一个新函数以使代码更易于维护。 鉴于以下情况:

    if ($Subtype -eq "Master" -and @($ColumnList | ? {$_.id -in $PK -and $_.name -like '*_SK'}).count -eq 1) {
        #TableColumnListPK for Master Data
        $global:TableColumnListPK = ($ColumnList | ? {$PK -match $_.id -and $_.name -like '*_SK'} | foreach {
            Create-AttributeWithDatatype        
        })
        
        #Column PK with only name-------------------------------------------------------------------------------------------------------
        $global:PKName = @(($ColumnList | ? {$_.id -in $PK -and $_.name -like '*_SK'}).name)
                     
        #ColumnList non PK columns---------------------------------------------------------------------------------------------------------------------------
             
        $global:TableColumnListNonPK = $([string]::Join(",`r`n",($ColumnList | ? {($ColumnList | ? {$PK -match $_.id -and $_.name -like '*_SK'}).id -notmatch $_.id} | foreach {
            Create-AttributeWithDatatype            
         })))
        # Add comma after last column if it doesn't have one.
        if ($TableColumnListPK -notlike "*,") {
            $global:TableColumnListPK += ","
        }
    }

这很难读,也不是很清楚是干什么的,所以我把它分成一行代码的函数

    if (Is_Master_And_SK_As_PK) {
        $TableColumnListPK = Master_And_SK_As_PK_TableColumnListPK($PK,$ColumnList)
        $PKName = Master_And_SK_As_PK_PKName($PK,$ColumnList)
        $TableColumnListNonPK = Master_And_SK_As_PK_TableColumnListNonPK($PK,$ColumnList)
    }

其中功能只有一行代码

function Master_And_SK_As_PK_PKName($PK,$ColumnList){
    #Column PK with only name-------------------------------------------------------------------------------------------------------
    $PKName = @(($ColumnList | ? {$_.id -in $PK -and $_.name -like '*_SK'}).name)
    return $PKName
}

这里的封装是不是矫枉过正了? 我没有找到很多关于 powershell 最佳实践的资源。大多数 powershell 代码是在一行中编写的,而其他语言会使用多行,因此不清楚我是否应该为此创建单独的函数? 在 powershell 中关于 Inderection 的最佳方法是什么?

Is [this] overkill

我不会这么说,虽然这个问题有点主观。

如果您是主要维护者,并且它使代码更易于阅读和维护,那么它是完美的: -)

您可能想要更改的一些内容:

命名

PowerShell 命令(包括函数)应使用 Verb-Noun 格式,即:

function Get-PKName($PrimaryKey,$ColumnList){
    $PKName = @(($ColumnList | ? {$_.id -in $PK -and $_.name -like '*_SK'}).name)
    return $PKName
}

通话中

PowerShell 的命令调用语法使用空格来分隔参数参数,而不是逗号分隔列表:

$PKName = Master_And_SK_As_PK_PKName($PK,$ColumnList)
# should be
$PKName = Master_And_SK_As_PK_PKName $PK $ColumnList
# or with a better name
$PKName = Get-PKName $PK $ColumnList