c# - 相似函数重构模式

标签 c# .net design-patterns

我有大约 20 个具有几乎相同模式的函数,我在 Sites 数组上运行,使用 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));
}

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

最佳答案

试试这个:

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));

关于c# - 相似函数重构模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897321/

相关文章:

c# - 如何解构 C# 7 中的参数值元组?

c# - 在 .NET 中,如何向需要身份验证的 Web 服务提供 session 标识符?

c# - BindAttribute 如何将数据库列绑定(bind)到程序中?

java - 原型(prototype)设计模式和简单的 Java 克隆之间的区别

design-patterns - 包含几个单子(monad)的 Haskell 设计

c# - 在 Mono for ARM 上运行简单的 winforms 应用程序

c# - 基于 XSD 变化的动态 XSLT 生成

c# - 如何将选项模式 (IOptions) 与 Azure Functions Premium 结合使用? (它不允许在应用程序设置名称中使用冒号)

c# - 我如何使用 Fluent NHibernate 来区分父关系的列

java - 我该如何改进这段代码?