gpt4 book ai didi

c# - 以正确的方式做 DRY 事情

转载 作者:行者123 更新时间:2023-12-02 05:23:15 27 4
gpt4 key购买 nike

我有一个包含两个项目的解决方案,每个项目都生成一个单独的 dll,供另一个 Windows 应用程序使用。这些项目中的每一个都有一个名为 MyActions 的类,只有一个这样的方法

项目 1

   public class MyActions
{
public SomeTypeA DoJob(string str1, string str2)
{
}
}

项目 2

   public class MyActions
{
public SomeTypeB DoJob(string str1)
{
}
}

这两个类的两种返回类型如下

    public class SomeTypeA 
{
public string stringA { get; set; }
public int someInt { get; set; }
}


public class SomeTypeB
{
public string someStringA { get; set; }

}

这些单独项目的两个类中的方法 DoJob 几乎有 80% 的代码是相同的。 Project1 是其 MyActions 类的 DoJob 方法具有一些仅特定于 Project1 的额外位。现在是转折点。Project1 最终将被废弃,它的 dll 将不再被使用。我想以最好的方式编写代码,以确保没有重复代码,这样我就不必制作一旦 Project1 停止,任何修改以删除 Project2 中任何不需要的代码。

我正在考虑使用继承并覆盖 DoJob 方法。如果它们的返回类型不同并且它们具有不同的输入参数,那将如何工作?也许将 Project1 的 MyActions 类中的一个参数推送到其构造函数?我还考虑在 Project1 中添加指向 Project2 的 MyActions 类的链接。但不确定如何继续实现,而不是重复我自己或以后可能遇到无法预料的问题。有什么提示、建议吗?

最佳答案

如果(且仅当)两个类中的两个方法的参数和返回类型实际上不同,分解出逐行相同的代码,假设它是一个 block ,并创建一个新静态类中的静态方法,传递公共(public)代码所需的参数。

如果有多个 block ,就只有多个方法。

从每个原始方法中适本地调用这些方法。

如果您想在这些类之间创建层次关系(只有在合乎逻辑的情况下才应该这样做),只需让它们都继承一个公共(public)类型,并使上面的方法成为该公共(public)类的 protected 方法即可。然后只需从原始方法中调用它即可。

关于c# - 以正确的方式做 DRY 事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531918/

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