gpt4 book ai didi

c# - OOP 约定 - 单函数方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:08 25 4
gpt4 key购买 nike

在 OOP 和所有一般编程中,我知道一个明确的规则是一个方法应该只执行一个特定的任务,如果需要执行另一个任务,则应该创建另一个方法。我的问题是这在我的情况下似乎毫无意义,因为它只是使用了更多的代码而不是一种大方法。

以下是我的代码的两种结构方式(一种遵循标准约定,另一种不遵循标准约定但可以节省代码)

场景一(2种方法)

增加统计方法

public void increaseStat(short value, string stat)
{
switch (stat)
{
case "stamina":
if (staminaCheck.Checked == true)
{
stamina += value;
staminaText.Text = Convert.ToString(stamina);
}
staminaCheck.Checked = false;
break;

//There are 5 other similar cases for different stats but to save time I removed them
}

和递减统计方法

public void decreaseStat(short value, string stat)
{
switch (stat)
{
case "stamina":
if (staminaCheck.Checked == true)
{
stamina -= value;
staminaText.Text = Convert.ToString(stamina);
}
staminaCheck.Checked = false;
break;

//There are 5 other similar cases for different stats but to save time I removed them
}

如您所见,除了 1 个操作是 + 而不是 - 之外,代码完全相同。因此,为了约定俗成,我没有将所有代码复制到另一个方法中,而是决定这样做

场景 2(一种处理增加和减少的大方法)

public void alterStat(short value, string stat, bool operator)
{
switch (stat)
{
case "stamina":
if (staminaCheck.Checked == true)
{
if (Operator == true) stamina -= value;
else stamina += value

staminaText.Text = Convert.ToString(stamina);
}
staminaCheck.Checked = false;
break;

//There are 5 other similar cases but to save time I removed them
}

通过这种方式,我通过添加一个简单的 if 语句在每个案例中添加了 2 行额外的代码,但节省了大量被复制的代码。

我只想请您就这是否被视为良好的编程实践发表意见。

感谢您的宝贵时间。

最佳答案

在我看来,减少重复代码的好处显然远远超过关注点分离规则,尤其是在代码维护方面。

类似的场景是使用 Enum作为对象的状态标志。正确的 OOP 方法是将每个状态建模为状态层次结构中的单独类。后者的缺点是您必须编写代码来找出对象的状态,特别是如果您使用访问者模式(使用 OOP 时应该这样做)。

如果涉及类的接口(interface),您提到的规则特别有用。如果更清楚(对于您类(class)的用户)有 IncreaseStat()DecreaseStat()操作,而不是一般的 ChangeStat() ,没有人会阻碍你实现 private ChangeStat()相应的public调用的方法增加和减少统计数据的方法。通过这种方式,您可以获得两个优势:针对特定任务进行特定操作,同时在内部没有重复代码。

关于c# - OOP 约定 - 单函数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114791/

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