2011-02-09 78 views
0

這裏是我的問題,使用PowerShell的存儲庫模式

我的問題不是真的與PowerShell,但我必須用它來實現持久性的方式。我經常遇到有超過4個命令來執行邏輯或應用持久性的情況。

例如:

在配置DNS區域,我得到正常的新建/獲取/設置/刪除-DnsZone 暫停/取消暫停-DnsZone。我的隊友目前如何處理它是因爲他們在存儲庫上創建了一個額外的方法來處理額外的命令。

在我看來,行爲應該在對象上,並且當在回購上執行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應有財產或方法。所以邏輯不是在回購中,而是在對象本身。儘管回購必須將其轉換爲掛起區域呼叫。

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

心連心

+0

你可以添加一些僞代碼來解釋這個更好嗎?我沒跟着你。 – x0n 2011-02-10 02:52:38

回答

0

好像這樣做會破壞大量的流水線功能,使Powershell的那麼容易從comnmand線使用。如果您消除贊成對象方法的掛起DNSZone cmdlet的,你不能這樣做

get-dnszone | suspend-dnszone 

你不得不做

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

不是在改善,恕我直言。

+0

我不認爲你明白。您不必調用存儲庫上的SuspendZone(字符串名稱)方法,您可以使用一種名爲Suspend的方法,甚至是一個屬性來處理該方法。然後在創建或更新存儲庫時,掛起區域將被調用。問題不在PowerShell中,而是使用Repository模式。也許我不清楚自己寫的方式。 – jfabre 2011-02-09 14:35:20