使用PowerShell的存储库模式

时间:2011-02-09 14:11:50

标签: powershell repository-pattern

这是我的担忧,

我的问题不在于PowerShell,而在于我必须使用它来实现持久性。我经常会遇到有超过4个命令来执行逻辑或应用持久性的情况。

例如:

配置Dns区域时,我得到正常的New / Get / Set / Remove-DnsZone Suspend / Unsuspend-DnsZone。我的队友当前如何处理它是因为他们在存储库上创建了一个额外的方法来处理额外的命令。

在我看来,行为应该改为对象,并且当在repo上执行Create或Update时应该调用Suspend / Unsuspend-DnsZone。

您怎么看?


修改 根据要求,我会提供一些代码来证明我在说什么。

这是一个假的例子,我们的Powershell包装器的实现几乎相似。 这是我的队友所做的存储库上的一种方法:

public void Suspend(DnsZone zone)
{
   _powerShell.Execute("Suspend-Zone", new Dictionary<string, object>{{"Name", zone.Name}});
}

所以在你的逻辑中,要暂停你必须调用的区域

var myZone = new DnsZone{ Name= "xyz"};
_zones.Suspend(myZone);

相反,我倾向于DnsZone应该拥有属性或方法。因此,逻辑不在repo中,而在于对象本身。即使回购必须将其转换为暂停区域呼叫。

var myZone = _zones.FindByName("nyname");
myZone.Suspend();
_zones.Save(myZone);

HTH

1 个答案:

答案 0 :(得分:0)

看起来这样做会破坏很多流水线功能,使得Powershell在命令行中如此易于使用。如果您取消了Suspend-DNSZone cmdlet以支持对象方法,则无法执行

  get-dnszone | suspend-dnszone 

你必须这样做

  get-dnszone | foreach-object {$_.suspend()}

不是改进,恕我直言。