我有一个程序可以从各个主题中招募犯罪现场的见证人。 每种主题都有其自己的报告类。例如:
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,reportingOfficer等)
我应该如何实施它?
使用DynaBean,Map<String, Object>
或类似的东西,使CrimeScene成为常规类(70个硬编码字段,平均将不超过20个硬字段)或动态类,是更好的实现吗? >
答案 0 :(得分:0)
最好将带有属性的类或某些复合类一起使用,这会允许您由于组成而限制单个类中的属性数量。 使用这种方法,您(以及任何其他开发人员)将确切知道对象具有哪些属性和类型。
如果使用map,那么您将失去类型安全性,因为必须使用Map<String, Object>
来容纳不同类型的属性值。同样,使用map方法时,知道存在哪些属性(在运行时将哪些键添加到map中)的唯一方法是调试代码。