类似的函数重构模式

eug*_*neK 6 .net c# design-patterns

我有大约20个具有几乎相同模式的函数,我在Site数组上运行,使用Site对象创建SiteOperation并执行一些操作(在这种情况下有一个参数但有时没有或更多)

int wantedBandwidthInLBps = 2048 / 8;
foreach (Sites site in _sitesManagement.GetAll())
{
 SiteOperation siteOperation = new SiteOperation(site);
 siteOperation.LimitBandwidth(wantedBandwidthInLBps);
}

foreach (Sites site in _sitesManagement.GetAll())
{
 SiteOperation siteOperation = new SiteOperation(site);
 siteOperation.KillJames();
}

foreach (Sites site in _sitesManagement.GetAll())
{
 SiteOperation siteOperation = new SiteOperation(site);
 siteOperation.FlyToMoon(2012, new TaskIdentifier(10,20));
}
Run Code Online (Sandbox Code Playgroud)

是否可以包装此代码,所以我将发送动作让我们说_sitesManagement将在所有网站上运行此操作?

das*_*ght 4

尝试这个:

void PerformOperationOnAllSites(Action<SiteOperation> doIt) {
    foreach (Sites site in _sitesManagement.GetAll()) {
        SiteOperation siteOperation = new SiteOperation(site);
        doIt(siteOperation);
    }
}

...

_sitesManagement.PerformOperationOnAllSites(op => op.LimitBandwidth(wantedBandwidthInLBps));
_sitesManagement.PerformOperationOnAllSites(op => op.KillJames());
_sitesManagement.PerformOperationOnAllSites(op => op.FlyToMoon(2012, new TaskIdentifier(10,20));
Run Code Online (Sandbox Code Playgroud)