技术开发 频道

试题库的设计和实现(借鉴String类实现减少数据冗余)


【IT168技术文档】

  试题管理是整个系统的核心。为了尽量的从逻辑上组织试题和尽量的减少数据冗余。在线考试系统把领域对象划分地非常细。下图说明了试题库相关领域类的设计

  这些领域类最终都要保存到数据库表里。为了方便管理将所有QuestionContent类的所有子类全部保存到QuestionContent表中。并用Type字段来区分不同的题型。Choice侧以XML的格式保存到Choices字段中。并编写了自定义的ChoiceList类来负责Choice集合从字段中的XML格式到对象集合的转换。
namespace ExaminationSystem.DAL.UserType { public class ChoiceList : IUserType { //代码省略… } }
  当需要加载领域类的时候必须把表里的记录转换成内存中的对象。当要保存领域类时候又必须把内存对象保存成记录。这些任务都有NHibernate自动来完成。我们要做的就是告诉NHibernate如何来做这两种不同风格数据表现的转换和映射。我们通过映射文件来告诉NHibernate那个类应该保存到那个表里。那个属性应该保存在那个字段里或者保存到其他表里。反之亦然!下面就用Subject,和Chapter来说明类到表是如何映射的。
<?XML version="1.0" encoding="utf-8" ?> <hibernate-mapping XMLns="urn:nhibernate-mapping-2.2" assembly="ExaminationSystem.BLL" namespace="ExaminationSystem.BLL.Domain"> <class name="Subject" table="Subject" lazy="false"> <id name="ID" column="ID"> <generator class="identity" /> </id> <property name="Name" column="Name" /> <bag name="Chapters" table="Chapter" inverse="true" cascade="all"> <key column="SubjectID"/> <one-to-many class="Chapter"/> </bag> <bag name="PaperStrategys" table="PaperStrategy" inverse="true" cascade="all"> <key column="SubjectID"/> <one-to-many class="PaperStrategy"/> </bag> </class> </hibernate-mapping>
0
相关文章