class 方法到 return `this` 的做法不好吗?
Is it bad practice for a class method to return `this`?
public class Chain
{
public string ChainString;
public Chain()
{
ChainString = "{}";
}
public Chain AddLink()
{
ChainString += "-{}";
return this; // is this a bad idea?
}
}
在上面的例子中,AddLink
方法returnsthis
。我想这样做的原因是为了更易读的实例化,如下所示。
// more verbose (here, `AddLink` returns void)
Chain myChain = new Chain();
myChain.AddLink();
myChain.AddLink();
myChain.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
// nicer
Chain myChain = new Chain()
.AddLink()
.AddLink()
.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
我有什么理由不应该这样做吗?我想不出任何一个,但感觉有点老套,而且我还没有在其他地方看到它。
没有。这是 fluent interfaces.
的常见模式
这很好。我也可以建议:
public Chain AddLink(int links = 1)
{
if (links <= 0) return this;
string link = "-{}";
var buf = new StringBuilder(ChainString, ChainString.Length + (links * link.Length));
for(int i=0; i<links; i++)
{
buf.Append(link);
}
ChainString = buf.ToString();
return this;
}
如上文所述,这是一种非常常见的设计模式,旨在提高代码的可读性。您可能会发现几个用于描述此类代码的术语(流畅的编码、流畅的风格、流畅的 api、流畅的界面)。
另一方面,调试起来很困难,有时甚至是不可能的。中间结果达不到。
public class Chain
{
public string ChainString;
public Chain()
{
ChainString = "{}";
}
public Chain AddLink()
{
ChainString += "-{}";
return this; // is this a bad idea?
}
}
在上面的例子中,AddLink
方法returnsthis
。我想这样做的原因是为了更易读的实例化,如下所示。
// more verbose (here, `AddLink` returns void)
Chain myChain = new Chain();
myChain.AddLink();
myChain.AddLink();
myChain.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
// nicer
Chain myChain = new Chain()
.AddLink()
.AddLink()
.AddLink();
// myChain.ChainString = "{}-{}-{}-{}"
我有什么理由不应该这样做吗?我想不出任何一个,但感觉有点老套,而且我还没有在其他地方看到它。
没有。这是 fluent interfaces.
的常见模式这很好。我也可以建议:
public Chain AddLink(int links = 1)
{
if (links <= 0) return this;
string link = "-{}";
var buf = new StringBuilder(ChainString, ChainString.Length + (links * link.Length));
for(int i=0; i<links; i++)
{
buf.Append(link);
}
ChainString = buf.ToString();
return this;
}
如上文所述,这是一种非常常见的设计模式,旨在提高代码的可读性。您可能会发现几个用于描述此类代码的术语(流畅的编码、流畅的风格、流畅的 api、流畅的界面)。 另一方面,调试起来很困难,有时甚至是不可能的。中间结果达不到。