何时在 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
主要问题是我什么时候应该在 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