我有很多类似这样的代码。
var o = new SomeClass().DoSomething(someParam);
这是一个设计缺陷吗?
这个类是一种构建器类。它应该构造其他对象。
var o = new SomeClass().DoSomething(someParam);
这是一个设计缺陷吗?
这个类是一种构建器类。它应该构造其他对象。
不,那很好 - 特别是当类型用作构建器时,您可能会经常看到它。例如:
string x = new StringBuilder().Append("Foo")
.AppendFormat("{0}:{1}", x, y)
.ToString();
或者在我的Protocol Buffers移植版中:
Person p = new Person.Builder { Name = "Jon", Age = 35 }.Build();
这里的Person
类型是不可变的,但builder类型不是 - 因此您需要创建一个建设者,设置一些属性,然后调用Build
方法。
如果在调用方法后不需要该实例,您最好使用 SomeClass
上的静态方法,并以此结束。
var o = SomeClass.DoSomething(someParam);
如果出于任何原因,您绝对需要一个新的实例来执行DoSomething
,那么您可以创建一个静态工厂方法,使代码更易读,如下:
var o = SomeClass.GetInstance().DoSomething(someParam)
从风格的角度来看这不是问题。 但是如果在调用DoSomething方法后需要构建SomeClass,则会出现问题。
这不是有缺陷的设计。我认为唯一的问题在于可读性,如果你的团队其他成员没有使用这种风格,尤其是在使用var时,不要使用它,因为这会使返回值更难理解。对我来说,我个人喜欢它,因为我习惯了从jquery中进行链式操作。