我在代码设计方面遇到了一个困境。
首先,我正在将VB转换为Java系统。VB程序有一个类模块,类似于POJO,并访问数据库以进行逻辑处理。我创建了一个类似的Java类,包括getter和setter。我的困境是,由于我需要复制VB代码的结构(我们被迫这样做),我还需要在我的Java类中包含查询服务。但在我们的框架中,只有服务类才能访问查询服务。
我考虑将我的Java类更改为抽象类,并使用匿名类。
示例:
public abstract class MyClass {
private int a;
private int b;
public String calculate1() {
// do processing for variables a and b
String sql = "" // build sql here
List<Map<String, Object>> result = query(sql);
}
public String calculate2() {
// do processing for variables a and b
String anotherSql = "" // build anotherSql
List<Map<String, Object>> result = query(anotherSql);
}
protected abstract List<Map<String, Object>> query(String sql);
// getters and setters for a and b
}
public class MyService {
@Autowired
private QueryService myQueryService;
public void execute() {
MyClass myClass = new MyClass() {
@Override
protected List<Map<String, Object>> query(String sql) {
return myQueryService.executeQuery(sql);
}
};
}
}
有几件事需要考虑:
- 我的服务是单例范围的bean。
- 我也希望MyClass是基于会话的(每个用户一个实例)。
- 由于我不会在Spring上下文中声明MyClass,它不能使用依赖注入和其他服务。我将在会话中保存该实例,并只获取MyClass的实例。
此外,因为这个困境,我被迫使用字符串查询和JDBC模板。最初,我们的框架使用DAO对象和Hibernate。如果有人也能使用DAO解决代码,那就更好了。如果我将使用DAO对象,则必须使用具有其DAO服务类的不同DAO对象。
我不确定这是否是一个好的设计。我也不知道这是否有效。我无法在我的环境中运行它。
如果有人能启发我,我会非常感激。
谢谢!