我想建议实现此目的的最佳方法是将您的“先决条件规则”存储在 XML 中,根据您的应用程序体系结构和需求,存储在数据库或硬文件中。XML 非常适合您的需求,因为您可以存储先决条件集,例如...
<Courses>
<Course>
<CourseCode>crs301</CourseCode>
<PrereqSets>
<PrereqSet>
<CourseCode>crs101<CourseCode>
<CourseCode>crs102<CourseCode>
<CourseCode>crs103<CourseCode>
</PrereqSet>
<PrereqSet>
<CourseCode>crs201<CourseCode>
<CourseCode>crs202<CourseCode>
</PrereqSet>
<PrereqSet>
<CourseCode>crs300<CourseCode>
</PrereqSet>
</PrereqSets>
</Course>
<Course>
<!--Some other course data goes here-->
</Course>
</Courses>
然后,您可以很容易地使用 XPath 从 XML 数据中查询出来。
当然还有其他方法可以通过将数据存储在数据库中来实现这一点。一种这样的方法可能是将其存储在具有复合键的关联表中,如下所示...
Course table
CourseID, Name
1, crs101
2, crs102
3, crs103
4, crs201
5, crs202
6, crs300
7, crs301
CoursePrereqMap table
CourseID, PrereqSetID, PrereqCourseID
7, 1, 1
7, 1, 2
7, 1, 3
7, 2, 4
7, 2, 5
7, 3, 6
无论如何,您都可以将先决条件集加载到自定义对象(即 VO 或 DTO,如果它们不是过时的术语),或者加载到某种列表或数组中,然后编写一个处理整个先决条件集的方法,甚至可能是先决条件集的列表或数组,并确保所有课程至少完成一组。
我希望这能回答您关于如何存储此类数据的第二个问题。这不是一个具体的答案,而是关于您可以实施它的几种方法的建议;当然,您可以采取很多方法。