Модель родителя / ребенка для DTO - PullRequest
0 голосов
/ 17 декабря 2011

Я не уверен, будет ли эта ситуация в большей степени связана с генериками , чем DTO , но здесь это так:

У меня есть DTO, представляющее Человек .A Person может иметь как детей прочее Person (s) или просто ResourceLink для тех Person (s),Это означает, что ребенок может быть одного из двух типов: Person (DTO) или ResourceLink .Какой это будет тип, определяется с помощью queryParam и, следовательно, логически с помощью следующего потока.Я хочу представить их, используя только ONE объект коллекции, и не знаю, как лучше всего это сделать.

Вот что у меня есть:

public class PersonDTO<T> {

    @XmlElementWrapper(name = "children")
    @XmlElement(name = "child")
    List<T> children;
    // other stuff

}

При таком подходе мне нужно определить переведенный тип на основе условия if...else.

Ранее у меня было 2 разных коллекции, одна из которых осталась NULL ,Я также думал об извлечении вещи отношения в новом DTO как ChildrenDTO (не уверен, что это отличная идея)

Я хотел бы знать, есть ли лучшая практика для этой ситуациив противном случае, если возможно объявить PersonDTO<PersonDTO> или PersonDTO<ResourceLink> в зависимости от условия.

Заранее спасибо!

1 Ответ

1 голос
/ 22 декабря 2011

Вместо этого я бы предложил использовать третий тип для элементов List детей:

    public interface PersonResolver () {
          Person resolvePerson ();
    }

    public class Person implements PersonResolver {
          Person resolvePerson () { return this; }
    }

    public class ResourceLink implements PersonResolver {
          Person resolvePerson () {
               if (myLinkTargetType == TARGET_TYPE_PERSON)
                      { return (Person) myTarget; }
               return null;
          }
    }
...