我有一个在图形上绘制图像的功能:
private void DrawSmallImage(Graphics g)
{
if (this.SmallImage == null) return;
var smallPicHeight = this.Height / 5;
var x = this.ClientSize.Width - smallPicHeight;
var y = this.ClientSize.Height - smallPicHeight;
g.DrawImage(this.SmallImage, x, y, smallPicHeight, smallPicHeight);
}
支票if (this.SmallImage == null) return;
应该在DrawSmallImage函数中还是应该在调用者中?哪个更好?
答案 0 :(得分:2)
放置检查逻辑的最佳位置是调用方法。
通常认为最好为单一,特定目的设计方法。这不仅可以使您的设计更清洁,还可以减少方法上的耦合并使其可重复使用。
答案 1 :(得分:1)
我会把它放在来电者中。 DrawSmallImage方法不应该知道类的状态。它的目的是DrawSmallImage。
答案 2 :(得分:0)
我会将支票留在那里,并将SmallImage
作为参数传递给DrawSmallImage
方法。
这样它就可以重复用于任何图像。
像
这样的东西private void DrawSmallImage(Graphics g, Image smallImage)
{
if (smallImage == null) return;
var smallPicHeight = this.Height / 5;
var x = this.ClientSize.Width - smallPicHeight;
var y = this.ClientSize.Height - smallPicHeight;
g.DrawImage(smallImage, x, y, smallPicHeight, smallPicHeight);
}
答案 3 :(得分:0)
发生这种情况时,您可能想要抛出异常:
if (this.SmallImage == null)
throw new NullReferenceException("Small image can't be null");
然后期望调用者检查如下属性:
bool HasSmallImage
{
get { return this.SmallImage!=null; }
}
答案 4 :(得分:0)
SmallImage是一个成员字段。在我看来,最好的设计是防止它永远为空的设计(例如,在每个构造函数中初始化它,如果它将被设置为null则抛出ArgumentException)。当然,你没有给出太多背景知识,所以这可能是不可能的。但这绝对值得考虑。
无论哪种方式,您都可以明确指定在调用此方法时它必须为非null。这是一种先决条件。