コードの設計に関してジレンマがあります。
まず、VBをJavaシステムに変換しています。VBプログラムには、POJOの組み合わせのようなクラスモジュールがあり、そのロジックのためにデータベースにアクセスします。ゲッターとセッターを使用して、JAVAで同様のクラスを作成しました。私のジレンマは、VBコードの構造をコピーする必要があるため(強制的に)、JAVAクラスにクエリサービスも含める必要があるということです。しかし、私たちのフレームワークでは、サービスクラスのみがクエリサービスにアクセスできます。
JAVAクラスをabstactクラスに変更し、代わりにAnonymousクラスを使用することを考えています。
サンプル:
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がセッションベース(ユーザーごとに1インスタンス)であるのも好きです。
- SpringコンテキストでMyClassを宣言しないため、依存性注入を使用したり、他のサービスを使用したりすることはできません。インスタンスをセッションに保存し、MyClassのインスタンスを取得するだけです。
また、このジレンマのために、文字列クエリとJDBCテンプレートを使用せざるを得ません。元々、私たちのフレームワークはDAOオブジェクトとHibernateを使用しています。誰かがDAOを使用してコードを解決できるのであれば、それはより良いでしょう。DAOオブジェクトを使用する場合は、DAOサービスクラスで異なるDAOオブジェクトを使用する必要があります。
これが良いデザインかどうかは完全にはわかりません。これがうまくいくかどうかもわかりません。私の環境ではこれを実行できませんでした。
誰かが私を教えてくれたら本当にありがたいです。
ありがとう!