我有很多像这样的代码
var o = new SomeClass().DoSomething(someParam);
这是一个设计缺陷吗?
这个类是某种构建器类。它应该构造其他对象。
答案 0 :(得分:6)
不,没关系 - 特别是你可能会经常看到它用作构建器的类型。例如:
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
类型是不可变的,但构建器类型不是 - 所以您创建构建器,设置一些属性,然后调用Build
。
答案 1 :(得分:3)
如果在调用方法后不需要实例,最好使用SomeClass
上的静态方法,最后用
var o = SomeClass.DoSomething(someParam);
如果由于任何原因,您绝对需要一个新实例来执行DoSomething
,那么您可以创建一个静态factoy方法,使代码更具可读性:
var o = SomeClass.GetInstance().DoSomething(someParam)
答案 2 :(得分:1)
在风格方面不是问题。 如果在调用DoSomething方法后需要构造的SomeClass,这将是一个问题。
答案 3 :(得分:1)
这不是有缺陷的设计。我要说的唯一的问题是可读性,如果团队的其他成员没有使用这种风格,那么不要使用它特别是 var 因为它使得更难理解返回的内容。对我来说,我个人喜欢它,因为我习惯于从jquery链接。