我应该接受与参数相同的对象并将其返回或仅将其作为参数接受吗?

时间:2011-05-31 18:42:47

标签: c# .net

我有以下界面:

public IStateMachineConfigurator
{
  ??? Configure(StateMachine machine);
}

在实现中,我调用了一些StateMachine方法来配置它:

machine.Configure(States.State1)
       .Allow(Triggers.Trigger1);

问题是,我可以依赖于StateMachine对象是引用的事实,还是应该使用返回值或返回参数(如ref / out)?

编辑:
状态机本身来自一个库,因此我无法决定它的实现。

3 个答案:

答案 0 :(得分:5)

如果你想使用建造者模式,那么你有效地返回正在传递的可变状态。如果你想沿着那条路走下去,这是完全没问题的。这就是StringBuilder类的操作方式,以及有点不同的注释jQuery。以紧凑和可读的方式构建对象非常好。但是,这些对象应该如此指定。构建器对象,最好不要超过必要的。

答案 1 :(得分:1)

是的,您可以依赖StateMachine是对象引用这一事实。有些人可能会选择返回boolenum来给程序员一些关于Configure方法中发生的事情的提示(即成功/失败/无变化/等等。)。其他人可能会选择在出现问题时抛出异常。

所有这些都是完全有效的,只要注意将方法链接在一起的深度,如:

machine.Configure().Allow().someMethod().someOtherMethod()

难以调试和跟踪。

答案 2 :(得分:1)

我宁愿选择Configurator对象并将其传递给Configuration构造函数,而不是创建StateMachine。这使得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);
    }
}