2013-12-04 2 views
0

Хорошо, у меня есть хороший вопрос о проверке отношений.Каков лучший способ проверить нулевые параметры из связей объектов

Следит ниже трех классов предположить, вопрос:

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; 
} 

Следуя этим principies, давайте предположим, что мы сделать отношения проверки, вместо каждый раз, когда мы делаем что-то вроде этого «в Дифференц частях наш код ":

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 отношениях, представьте, что вы написали, если (object == null), это не кажется хорошим для меня.

Спасибо!

ответ

0

Я бы предпочел найти соответствующую часть вашего кода, где вы должны проверить это только один или два раза. Почему вы должны называть этот чек более двух раз? Должно быть, этого недостаточно, чтобы проверить это, если 1. вы спасете сына или 2. загрузите сына из базы данных?

0

Я думаю, что если вам нужно разместить вышеуказанные проверки во многих местах, с метанием Exception с предопределенными сообщениями, то этот подход по крайней мере обеспечит причину (т.е. все исключения будут управляться в центральном месте) и, следовательно, это действует.
Я предлагаю вам иметь разные функции, каждый из которых проверяет индивидуально Son, Father и GrandFather и т. Д. И рамку с этими boolean условиями.

Но если эти исключения просто брошены, чтобы сломаться без каких-либо значений, тогда вы должны рассмотреть вопрос о том, чтобы провести проверку obj == null, если вам необходимо их проверить.

Вы также можете прочитать Avoiding != null statements.

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; } 
0

Если нуль является частью контракта, то я полагаю, да создающего вспомогательный метод лучше, чем повторять один и тот же код все над местом. Однако гораздо лучшей альтернативой является просто избежать этого в некотором роде.Для примера рассмотрим следующее:

public Son(int idSon, String name, Father father) { 
    if (father == null) { 
     this.father = new Father(0, "Unknown", null); 
    } 
} 

Или если обнуляет являются незаконными, то, чтобы конструктор делегата за исключением:

public Son(int idSon, String name, Father father) { 
    if (father == null) { 
     throw new IllegalArgumentException(
      "Children must have parents to be born." 
     ); 
    } 
} 

Если объект является недействительным в пределах своих собственных спецификаций имеет больше смысла, чтобы не построить его вообще.

Наконец, вы проверяете на нуль и бросать исключение:

if(son.getFather == null){ 
    throw new Throwable("Father's Son does not exist"); 
} 

Так зачем? Если nulls являются незаконными, почему бы не получить исключение NullPointerException?

0

Действительно существует множество способов его реализации. Но в моем случае я не могу создать правило вроде «не может существовать каких-либо отношений == null» или любой другой реализации, потому что в разных действиях у меня разные подходы, иногда я должен проверять отца сына, например , Еще один, я должен проверить сына отца и деда, . Мой метод должен быть гибким и универсальным. Я проанализировал, что kjhf сказал мне, реализуя его по-другому, без обязательных параметров реализаций ... В некоторых случаях у меня три отношения, у другого - пять, а другой только один. В любом случае, я пытаюсь найти способ сделать это только один раз, и все объекты используют один и тот же метод. В настоящее время я создаю новый метод внутри каждого бизнес-класса, который ссылается на один объект. Тогда, если у меня 10 сущностей, логически у меня есть 10 методов проверки. Если у кого-то есть какая-то идеа, пожалуйста, я жду.

Спасибо всем.

Смежные вопросы