gpt4 book ai didi

c# - 如何重构这些方法以避免重复?

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:49 24 4
gpt4 key购买 nike

在我们的代码库中

public ActionResult Copy(string id, string targetId)
{
//lot of similar code
Copy(sourcePageRef, destinationPageRef);
//lot of similar code
}

public ActionResult Move(string id, string targetId)
{
//lot of similar code
Move(sourcePageRef, destinationPageRef);
//lot of similar code
}

问题是,Copy 和 Move 有不同的签名:

PageRef Copy(PageRef, PageRef)

void Move(PageRef, PageRef)

如何重构这些方法以避免重复?谢谢

最佳答案

如果您不需要 Copy 的结果, 你仍然可以使用 Action<string, string>或任何类型:

public ActionResult Copy(string id, string targetId)
{
CopyOrMove((x, y) => Copy(x, y));
}

public ActionResult Move(string id, string targetId)
{
CopyOrMove(id, targetId, (x, y) => Move(x, y));
}

private void CopyOrMove(string id, string targetId,
Action<string, string> fileAction)
{
// lot of similar code
fileAction(sourcePageRef, destinationPageRef);
// lot of similar code
}

这是一个选项。这取决于“大量相似代码”真正在做什么,以及第二个 block 是否需要第一个 block 的结果。例如,如果您可以这样做:

public ActionResult Copy(string id, string targetId)
{
string sourcePageRef = PrepareSourceFile(id, targetId);
string targetPageRef = PrepareTargetFile(targetId);
Copy(sourcePageRef, targetPageRef);
CleanUp(sourcePageRef, targetPageRef);
return ...;
}

public ActionResult Move(string id, string targetId)
{
string sourcePageRef = PrepareSourceFile(id, targetId);
string targetPageRef = PrepareTargetFile(targetId);
Move(sourcePageRef, targetPageRef);
CleanUp(sourcePageRef, targetPageRef);
return ...;
}

...那么这可能比使用委托(delegate)进行重构的方法更简单。

关于c# - 如何重构这些方法以避免重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com