我应该接受同一对象作为参数并返回它还是只接受它作为参数?

问题描述

| 我有以下界面:
public IStateMachineConfigurator
{
  ??? Configure(StateMachine machine);
}
在实现中,我正在调用一些StateMachine方法来像这样配置它:
machine.Configure(States.State1)
       .Allow(Triggers.Trigger1);
问题是,我可以依靠StateMachine对象是引用这一事实还是应该使用返回值或返回参数(例如ref / out)? 编辑: 状态机本身来自库,因此我无法确定其实现。     

解决方法

        是的,您可以依靠“ 2”是对象引用这一事实。有些人可能选择返回“ 3”或“ 4”,以向程序员提供有关“ 5”方法中发生的情况的某种提示(即成功/失败/不变)。其他人可能选择在发生问题时引发异常。 所有这些都是完全有效的,请注意将方法链接在一起的深度,例如:
machine.Configure().Allow().someMethod().someOtherMethod()
变得难以调试和跟踪。     ,        如果您想使用构建器模式,那么您可以有效地返回正在传递的可变状态。如果您想走那条路,那就很好。这就是StringBuilder类的运行方式,并且jQuery有所不同。以紧凑且可读的方式构建对象可能非常好。但是,这些对象应这样指定。生成器对象,最好不要承担不必要的任务。     ,        我宁愿创建一个
Configuration
对象并将其传递给
StateMachine
构造函数,也不愿创建
Configurator
。这使
StateMachine
类的用户知道在使用前必须为其提供有效的配置。
class StateMachineConfiguration
{
    public IEnumerable<State> States { get; private set; }
    public IEnumerable<Trigger> Triggers { get; private set; }
}

class StateMachine
{
    public StateMachine(StateMachineConfiguration config) 
    {
         if(config == null)
              throw new ArgumentNullException();

         this.Configure(config.States);
         this.Allow(config.Triggers);
    }
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...