我需要一些专家建议。我需要为我的Web应用程序建模不同的用户类型,并且不确定如何最好地建模。基本上,该应用程序的用户是治疗师。本质上是应用程序的用户。那么我是否要创建一个治疗师表/域对象和一个治疗师DAO,或者我保留一个通用用户表/ userDAO而不是使用角色类型/名称?当所有查询都针对治疗师表时,一般用户表和DAO方法始终引用userTable似乎很奇怪。例如,返回治疗师提供的所有治疗类型的方法将是findTherapyTypes(治疗师,治疗师)。但是,如果我使用用户表和用户域对象,则该方法将是findTherapyTypes(User,userId),这似乎不对。如果我使用通用的用户域对象,那么它将具有一个似乎没有正确的疗法类型列表,因为将来不同的用户类型可以说是Patient,并且在这种情况下,治疗类型列表将始终为null,因为它不会应用
将来可能会有其他用户类型,例如患者或客户根据治疗师收到的治疗方法留下反馈意见?
我将使用Hibernate,因此考虑使用继承映射为用户提供不同的用户类型,其中一个治疗师类扩展了一个基本User类并实现了一个具有常用属性的用户界面,如firstname,surname等。
任何反馈都会非常感激:):)
感谢 标记
答案 0 :(得分:1)
我认为您应该花一点时间分析您想要涵盖的用例。用文字描述它们(就像你在帖子中开始的那样)。 不要以治疗师,客户和患者都是用户的想法开始。尝试找出所有这些信息所需的信息以及它们的生命周期。应用程序应该用它们做什么?在您指定了用例之后,应该清楚哪些是用户,哪些只是模型中的简单实体,而不是演员。
假设在所有这些之后你会得到超过1种类型的用户,假设治疗师和患者,强迫他们被持久存储在一个单独的表中并且有一个列决定他们的类型对我来说似乎不自然。治疗师可能需要参考对患者没有意义的所有类型的集合(反之亦然)。
我的建议是(如果你最终有超过1种类型的用户)来创建一个User表(包含所有常见字段和集合),一个Therapists表和一个患者表。使用Hibernate的继承映射(http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html),您的设计应保持干净,易于扩展。我推荐每子类策略表,但这可能只是个人偏好。