C# 方法,该方法不执行任何操作或引发异常
我有一个大方法,其中一部分检查对象的状态,如果状态无效,则抛出异常。我应该提取一个方法吗?新方法“CheckState”将不执行任何操作或引发异常。如果它确实不执行任何操作,那么您应该能够安全地完全删除代码C# 方法,该方法不执行任何操作或引发异常,c#,oop,refactoring,C#,Oop,Refactoring,我有一个大方法,其中一部分检查对象的状态,如果状态无效,则抛出异常。我应该提取一个方法吗?新方法“CheckState”将不执行任何操作或引发异常。如果它确实不执行任何操作,那么您应该能够安全地完全删除代码 否则,代码必须执行某些操作。在这种情况下,您应该能够安全地创建一个单独的方法,它肯定会使您的代码更干净。惯例是Check-返回bool,而Verify-将在验证失败时抛出异常 例如,参见和: CheckAccess和VerifyAccess之间的区别在于CheckAccess返回一个Bool
否则,代码必须执行某些操作。在这种情况下,您应该能够安全地创建一个单独的方法,它肯定会使您的代码更干净。惯例是
Check-
返回bool
,而Verify-
将在验证失败时抛出异常
例如,参见和:
CheckAccess
和VerifyAccess
之间的区别在于CheckAccess
返回一个Boolean
,指示调用线程是否有权访问调度程序,并且VerifyAccess
引发异常
如果我理解正确,您的意思是说方法的一部分检查对象的状态,如果对象无效则抛出异常
您进一步询问是否应该将其移动到自己的方法(检查对象状态并抛出异常的方法无效)
答案确实是;可能两者都没有。只有在“异常”情况下才应该抛出异常。如果输入方法并希望对象处于有效状态,则将其视为有效状态使用
如果发生意外情况,则捕获该异常并抛出“InvalidStateException”。(如果编程正确,也不需要这样做。)
如果您输入了方法,但不确定对象是否处于有效状态,则该对象处于无效状态不是“意外”行为,应以不同方式处理
这就是您的检查方法的作用。它不应该抛出异常,但可能会返回一个布尔值,它将决定您接下来要做什么。案例中的无效对象是完全合理的,因此使用您的代码通过返回其有效状态布尔值的check方法来处理该案例
请描述我所说的。将状态检查与状态更改代码分开甚至是一种很好的做法。然而,如果您的类在很大程度上依赖于这里和那里的状态,那么您可能应该看看
在这个模式中,行为的差异是通过使用一个方法来建模的,该方法对每个状态类都有不同的实现
这可能比下面更好地实现,但它让您尝到了味道:
class FooState {
FooState handleFoo();
FooState handleBar();
}
class ValidState {
FooState handleFoo(){...
}
FooState handleBar(){
return InvalidState(stateful);
}
}
class InvalidState {
FooState handleFoo() { throw InvalidState(); }
FooState handleBar() {
return ValidState(stateful);
}
}
class StatefulObject {
public FooState state;
public void foo(){ state=state.handleFoo(); }
public void bar(){ state=state.handleBar(); }
}
有关堆栈溢出的问题应以英语提出。那不是英语。这是英语。说真的,像这样的问题怎么能得到4票以上的选票呢?@Kendall Frey:我不赞成这种对新用户的不耐烦和敌意。只要你努力,这个问题就不难理解了。我向上投票是为了补偿不合理的向下投票。这个问题是否表明了研究的努力?它有用吗?清楚吗?@KendallFrey我和道格拉斯做了同样的事。这是互联网,如果你对没有完美英语的所有人都投了反对票,那么我很同情你的鼠标键。