0

我有一个模型类,它代表数据库中的一个表。该表有 7 列,因此该类有 7 个属性。其中一些允许为空,其他则不允许。

因此,当我将一个人传递给公共函数时,我会检查不允许为空的属性是否不为空。与正常检查一样

if(person.getName() == null || person.getSurname() == null ...)
     throw new NullPointerException();

我现在想知道在 Person 类中创建一个基本上可以做到这一点的函数是否有任何缺点?像

public void checkFullDataset()
{
   if(name == null || surname() == null ...)
       throw new NullPointerException();
   return;
}

因此,每当我与一个人一起工作时,我都会调用此方法,而不是手动测试所有字段。如果将来更改表(添加新字段,更改空/非空行为等),这也是有利的,因为我只需要更改此函数而不是代码周围的许多“if”。

4

3 回答 3

1

两个想法:

  1. 最好禁用空构造函数并引入一个将所有字段作为参数并将检查放在那里的构造函数。

  2. 如果你想添加这样的方法,最好让会话返回boolean类似于标准check函数,如hasElement()hasNext()iEmpty(),并让用户处理它。

    public boolean checkFullDataset() {
       if(name == null || surname() == null ...)
         return false;
        return true;
    }
    
于 2012-10-16T16:11:37.017 回答
0

满足您的需求的最佳解决方案是使您的Person类不可变,并使用Builder 模式在初始化时检查必填字段,之后再也不检查:

看看这个样本:http: //xavimiro.blogspot.fr/2008/04/new-builder-pattern.html

于 2012-10-16T16:16:27.390 回答
0

您似乎发现的是“类不变”的概念。有一些编程语言,例如Eiffel语言在进入和退出类的每个公共函数之前检查约束,如果不满足则抛出异常;几乎是你自己在做的事情。

还要查找函数的前置条件和后置条件,类似的概念。

根据代码,您可能会发现检查是性能问题,在这种情况下,您可以为生产代码禁用它们

于 2012-10-16T16:17:13.833 回答