我在J2ee应用程序中有以下枚举,
它们代表DB中学生或教师保存的文档
public enum StudentDocumentTypeEnum
Student Card
Cafeteria benefit Card
public enum TeacherDocumentTypeEnum
Employee Card
Benefits Card
Parking access Card
目前在后端,两个文档都保存到不同的表中,
saveDocument(byteArry[], TeacherDocumentTypeEnum)
saveDocument(byteArry[], StudentDocumentTypeEnum)
我想整合并创建一个单独的模块来保存学生或教师的文件
一种解决方案是创建一种方法来保存将合并为“DocumentTypeEnum”
的文档saveDocument(byteArry[], DocumentTypeEnum )
但我仍然希望能够区分学生或教师类型的文档枚举, 这里最好的方法是什么?
还有其他建议吗?
答案 0 :(得分:2)
根据对象属性的值,您不应该有任何代码。这违反了告诉,不要问!原则。
写了这个我'建议创建interface DocumentType{} // empty, just a tag
public enum StudentDocumentTypeEnum implements DocumentType{
// ..
public enum TeacherDocumentTypeEnum implements DocumentType{
// ..
界面。
foreach
答案 1 :(得分:1)
抱歉所有的变化 - 在我写作的时候重新思考它!
你可以创建一个" CardHolder"接口与单个"卡[] getCards()"他们都实现的方法。这两个类会有所不同,但总会返回要保存的文档列表。
public enum StudentDocumentTypeEnum implements CardHolder
Card student;
Card cafeteriaBenefit;
public Card[] getCards() {// Method on CardHolder
return new Card[]{student, cafetriaBenifit};
}
public enum TeacherDocumentTypeEnum implements CardHolder
Card employee;
Card benefits;
Card parkingAccess;
public Card[] getCards() {// Method on CardHolder
return new Card[]{employee, benefits, parkingAccess};
}
另一种选择是接受" Enum"反过来访问它,这样你仍然可以保留现有的结构。请记住,反射有许多缺点 - 它不是明显的代码,它不能被重构"使用工具在编译时未经证实(如果方法签名表明它需要任何" Enum"?),你如何告诉编码员只传入学生或老师?
最后这可能不是枚举的情况。为什么不拥有Student和Teacher对象,每个对象都有一组扩展相同基类或实现相同接口的卡?