gpt4 book ai didi

Java代码设计困境

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:30 26 4
gpt4 key购买 nike

我对代码的设计进退两难。

首先,我正在将VB 转换为Java 系统。VB 程序有一个类模块,它类似于 POJO 的组合,并为其逻辑访问数据库。我用 getter 和 setter 在 JAVA 中创建了一个类似的类。我的困境是因为我需要复制 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);
}
};
}
}

需要考虑的几件事:

  1. 我的服务是一个单例范围的 bean。
  2. 我还喜欢 MyClass 基于 session (每个用户 1 个实例)。
  3. 因为我不会在我的 Spring 上下文中声明 MyClass,所以它不能使用依赖注入(inject),也不能使用其他服务。我将在 session 中保存该实例,并且只检索 MyClass 的实例。

也是因为这个困境,我被迫使用字符串查询和JDBC模板。最初,我们的框架使用 DAO 对象和 Hibernate。如果有人也可以使用 DAO 解决代码,那就更好了。如果我将使用 DAO 对象,我将不得不使用不同的 DAO 对象及其 DAO 服务类。

我不完全确定这是否是一个好的设计。我也不知道这是否行得通。我无法在我的环境中运行它。

如果有人能启发我,我将不胜感激。

谢谢!

最佳答案

既然 MyClass 的实例没有 QueryService 的实例就无法运行,那么您如何将查询服务的引用传递到 的构造函数中呢?我的类:

public abstract class MyClass {
private final QueryService queryService;

public MyClass (QueryService queryService) {
this.queryService = queryService;
}

protected List<Map<String, Object>> query(String sql) {
return queryService.executeQuery(sql);
}
}

public class MyService {
@Autowired
private QueryService myQueryService;

public void execute() {
MyClass myClass = new MyClass(myQueryService);
}
}

queryService 实例字段设为final,并拥有这样一个构造函数,在代码中清楚地表达了这种依赖关系。

关于Java代码设计困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com