我对关系验证提出了一个很好的问题。
按照以下三个类来设想问题:
public class Son {
private Integer idSon;
private String name;
private Father father;
}
public class Father {
private Integer idFather;
private String name;
private GrandFather grandFather;
}
public class GrandFather {
private Integer idGrandFather;
private String name;
}
遵循这些原则,我们假设我们要进行关系验证, 相反,每次我们在“代码的不同部分”执行此类操作时:
Son son = new SonBusiness().getById(idSon); //Get a Son from database
if(son.getFather == null){
throw new Throwable("Father's Son does not exist");
}
不会更好地创建一些方法,如:
public void verifySonsDatas(Son son, Bollean verifyFather, Boolean verifyGrandFather) throws Throwable{
if(son == null){
throw new Throwable("Son does not exist");
}
if(verifyFather){
if(son.getFather == null){
throw new Throwable("Father's Son does not exist");
}
}
对于任何儿子的关系,等等......
有人同意使用这种方法我们可以避免许多冗余代码,我们可以将验证集中在一个独特的方法中......?
如果我们考虑10个关系,想象一下if(object == null)它对我来说似乎不是一件好事。
谢谢!
答案 0 :(得分:0)
我宁愿建议您找到代码的相应部分,您只需要检查一次或两次。你为什么要把这张支票叫两次以上?如果1.你保存一个儿子或2.从数据库中加载儿子,这不足以检查这个吗?
答案 1 :(得分:0)
我认为如果您必须将上述检查放在很多地方,并抛出一些带有预定义消息的Exception
,那么这种方法至少会提供一个理由(即所有异常都将在中心位置进行管理)因此它是有效的
我建议您应该分别使用不同的功能来单独检查Son
,Father
和GrandFather
等等,并使用这些boolean
条件构建方法。
但是如果这个例外,只是抛出没有任何意义,那么你应该考虑放置obj == null
检查你需要检查它们。
您还可以阅读Avoiding != null statements了解相关信息。
答案 2 :(得分:0)
如何实现某种接口来指定系列的继承(呵呵)。
interface IChild {
abstract int GetParent();
}
儿子:
Son implements IChild
@override
int GetParent() { return this.father.idFather; }
父亲:
Father implements IChild
@override
int GetParent() { return this.grandFather.idGrandFather; }
答案 3 :(得分:0)
如果null是合同的一部分,那么我想是的,创建一个帮助方法比在整个地方重复相同的代码要好。然而,更好的选择是以某种方式避免这种情况。例如,请考虑以下事项:
public Son(int idSon, String name, Father father) {
if (father == null) {
this.father = new Father(0, "Unknown", null);
}
}
或者如果nulls是非法的,那么使构造函数成为异常的委托:
public Son(int idSon, String name, Father father) {
if (father == null) {
throw new IllegalArgumentException(
"Children must have parents to be born."
);
}
}
如果某个对象在其自己的规范中无效,那么根本不构建它就更有意义。
最后,您正在检查null并抛出异常:
if(son.getFather == null){
throw new Throwable("Father's Son does not exist");
}
为什么要这么麻烦?如果nulls是非法的,为什么不得到NullPointerException?
答案 4 :(得分:0)
确实存在许多实现它的方法。 但在我的情况下,我不能创建一个规则,如“不能存在任何关系== null”或任何其他实现,因为在不同的行动,我有不同的方法,有时我会验证儿子的父亲为例。另一个我要验证父亲和祖父的儿子, 我的方法需要灵活和通用。 我已经分析了什么 kjhf 说了我,用另一种方式实现它,而不是强制实现的参数......有些情况我有三个关系,另一个我五个,另一个只有一个。 无论如何,我试图找到一些方法只做一次,所有对象使用相同的方法。 现在我在每个引用一个实体的业务类中创建一个新方法。然后,如果我有10个实体,逻辑上我有10种验证方法。 如果其他人有一些想法,拜托,我在等。
谢谢大家。