基本的に Hibernate を介してデータベースから Bean オブジェクトを取得し、データベースに格納する前に 2 つまたは 3 つのプロパティの値を変更するコードの一部があります。
実際の例を見てみましょう。私のアプリケーションの目的は、数人が MCQ テストを受けられるようにすることです。ユーザーが回答を送信するたびにスコアを更新してデータベースが過負荷になるのを防ぐためHashMap
に、テストの最後にデータベースにフラッシュされるスコアカウンターを に保存しています。また、テストが終了した時刻を示すタイムスタンプを更新する必要があります。
私の現在の設計には 2 つの機能が含まれます。
この最初の関数は、スコアを からHashMap
データベースにフラッシュします。
private void flushScoreToDatabase(String id) {
int score = scoreMap.get(id);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
try {
session.beginTransaction();
Student student = (Student)session.get(Student.class, Integer.parseInt(id));
student.setScore(score);
session.getTransaction().commit();
scoreMap.remove(id);
} catch (HibernateException e) {
session.getTransaction().rollback();
}
}
2 番目の関数には、タイムスタンプの更新が含まれます。
private void updateTimestamp(String id) {
Session session = Hibernate.getSessionFactory().getCurrentSession();
try {
sesssion.beginTransaction();
Student student = (Student)session.get(Student.class, Integer.parseInt(id));
student.setEndTime(timestamp);
session.getTransaction().commit();
} catch (HibernateException e) {
session.getTransaction().rollback();
}
}
id
両方の関数は、認証されたセッションからユーザーのを取得する別の関数によってラップされます。
これには 2 つのステートメントと、同じユーザーの 2 つの異なるプロパティを更新するためだけSELECT
の 2 つのステートメントが含まれるため、かなりコストがかかります。UPDATE
SRP に準拠しながらコードを設計するためのより適切な方法はありますか?