这个检查逻辑应该去哪里?

时间:2010-03-19 04:06:25

标签: c#

我有一个在图形上绘制图像的功能:

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函数中还是应该在调用者中?哪个更好?

5 个答案:

答案 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。这是一种先决条件。