我有一个程序,从各种科目招募犯罪现场的证人帐户。每种主题都有自己的Report类。例如:
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个)或动态类是更好的实现吗?
最好使用具有属性的类或者某些复合类,这样可以限制由于组合而在单个类中的属性数。使用这种方法,您(以及任何其他开发人员)将确切地知道对象具有哪些属性和类型。
如果你使用map,那么你将失去类型安全性,因为你必须使用Map<String, Object>
来适应不同类型属性的值。另外,使用map方法,了解存在哪些属性(在运行时将哪些键添加到地图中)的唯一方法是调试代码。