Динамический класс против жестко закодированных полей Java - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть программа, которая набирает свидетельские показания на месте преступления из разных предметов.У каждого вида предмета есть свой класс отчета.Например:

public class EyeWitnessReport extends AbstractReport {
        private String details;
        private String relation;
        private QuestioningResults questioningResults;
        private Integer stressLevel;
        private EnumSet<CrimeFacts> crimeFacts;
        private Religion religion; //to see if swearing on the Bible is an issue
    }

public class ExpertWitnessReport extends AbstractReport {
    private Expertise fieldOfExpertise;
    private boolean relatedToAccused;
    private List<Conflict> conflicts;
}

Основная функция моего приложения берет все отчеты и объединяет их в один класс CrimeScene, который содержит все детали места преступления (по приоритетам и т. Д.)

 public CrimeScene mergeReports(List<AbstractReport> sources){
        //takes all the reports in sources and returns one CrimeScene with the most relevant fields
}

Мой вопрос заключается в том, что класс CrimeScene в основном состоит из данных отчетов по определенной логике.Он имеет 70 возможных полей (поля каждого типа отчета), хотя в среднем заполнено только около 10-20.Кроме того, у него есть 2-3 собственных поля (creationTime, reportsOfficer и т. Д.)

Как мне его реализовать?Это лучшая реализация, чтобы сделать CrimeScene обычным классом (70 жестко закодированных полей, из которых в среднем будет заполнено не более 20), или динамическим классом, использующим DynaBean, Map<String, Object> или что-то в этом роде?

1 Ответ

0 голосов
/ 20 февраля 2019

Лучше использовать класс со свойствами или, возможно, какой-нибудь составной класс, который позволил бы вам ограничить количество свойств в одном классе из-за композиции.При таком подходе вы (и любой другой разработчик) будете точно знать, какие свойства и какие типы имеет объект.

Если вы перейдете с картой, вы потеряете безопасность типов, потому что вам придется использовать Map<String, Object> дляприспособить значения свойств разных типов.Также при использовании подхода с использованием карты единственный способ узнать, какие свойства существуют (какие ключи добавлены на карту во время выполнения), - это отладить код.

...