我有一个抽象工厂类StudentValidatorFactory,它支持创建(基于指定参数)验证映射必须注入的各种StudentValidator类实例(请参阅下面的代码)。在抽象工厂中插入数据库访问依赖关系是否好?
public class StudentValidatorFactory{
public static final int JUNIOR_STUDENT_TYPE = 1;
public static final int SENIOR_STUDENT_TYPE = 2;
public StudentValidator createStudentValidator(int studentType) throws StudentValidatorCreationException{
Map<String,ValidationBean> validationMap = readValiationMapFromPersistentOrCachedStorage(studentType);
switch (studentType){
case JUNIOR_STUDENT:
return new JuniorStudentValidator(validationMap);
case SENIOR_STUDENT:
return new SeniorStudentValidator(validationMap);
}
}
}
public interface StudentValidator{
void validate(Student student) throws StudentValidationException;
}
public class JuniorStudentValidator{
private Map<String, ValidationBean> validationMap;
public JuniorStudentValidator(Map<String,ValidationBean> validationMap){
this.validationMap = validationMap;
}
public void validate(Student student) throws StudentValidationException{
// make use of validation map for apply junior student related validations on the student
}
}
public class SeniorStudentValidator{
private Map<String, ValidationBean> validationMap;
public SeniorStudentValidator(Map<String,ValidationBean> validationMap){
this.validationMap = validationMap;
}
public void validate(Student student) throws StudentValidationException{
// make use of validation map for apply senior student related validations on the student
}
}
我的问题是关于StudentValidatorFactory.createStudentValidator(INT studentType)方法是否读取从持久性存储(基于学生型)验证地图应创建方法内完成?否则说,工厂是否应该了解/依赖这些实施细节?
我很感激,如果有创建学生验证器时避免切换(studentType)语句的解决方案 - 我头顶的想法是有一个内部管理的地图并通过通过执行StudentValidator具体类实例化反思。
使用这种技术的优点是验证器更容易测试(通过依赖注入)。
这是所提供的代码的改进,但它并没有回答这个问题。是否需要依赖工厂进行学生验证检索,还是通过避免学生类型的**开关**提供更好的解决方案?我正在寻找一种方式来实现更松散耦合的功能。 – 2011-12-20 12:51:10
@marius_neo:你没有在你的问题中提及'switch statement issue'。 – home 2011-12-20 13:15:52
@home你说得对。我现在这样做了。 – 2011-12-20 13:39:36